El tema de esta vez es que el T19 de LeetCode elimine el nodo N de la parte inferior de la lista vinculada (medio), no hay mucho que decir, el siguiente tema:
la definición del nodo de la lista vinculada:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
Este es un problema relativamente simple, siempre que comprenda la estructura de datos de la lista vinculada, puede pensar en una solución.
Idea de resolución de problemas: configure para recorrer primero la lista vinculada para obtener la longitud de la lista vinculada y luego modificar la lista vinculada. Como se muestra a continuación:
podemos ver que si queremos eliminar el penúltimo, entonces necesitamos modificar el siguiente del nodo cuyo índice es sum-n-1, dejemos node.next = node.next.next;
luego Abajo el código:
class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
//判空操作
if(head==null||head.next==null)
return null;
//定义两个指针,point用来操作链表,gethead用来表示对头结点的引用
ListNode point=head;
ListNode gethead=head;
int sum=0;//用来计算链表长度
//计算长度
while(head!=null){
sum++;
head=head.next;
}
int index=0; //计算当前遍历到第几个
//排除特殊情况,当sum=n的时候!
if(sum-n-1<0){
return gethead.next;
}
//通过point指针对链表进行操作
for(int i=0;i<sum;i++){
if(index==sum-n-1){
//修改next 达到删除的目的
point.next=point.next.next;
break;
}
index++;
point=point.next;
}
return gethead;
}
}
El código es como el anterior, ¡hay dos puntos a tener en cuenta!
Uno: Recuerda realizar la operación de vaciado.
Dos: cuando el valor de sum yn son iguales, es decir, la longitud de la lista enlazada y borra el n-ésimo de la parte inferior, cuando estos dos valores son iguales, sum-n-1 será menor que 0, por lo que la siguiente operación de modificación no se realizará y debe discutirse por separado !
Lo anterior es la explicación de este tema. Si hay algo mal, puedes señalarlo, ¡gracias!