Escriba el título del catálogo aquí
1. Título
2. Mis pensamientos y problemas iniciales
Esta pregunta es muy reflexiva, defina directamente un nodo ficticio, después de obtener la longitud de la lista vinculada, use un bucle for para obtener el nodo anterior del nodo a eliminar y luego temp2.next = temp2.next.next;
complete la eliminación.
3. Método de resolución de problemas 1: Defina un nodo ficticio:
class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
ListNode temp = head;
int length = 0;
//定义一个虚拟节点
ListNode virtus = new ListNode(0 ,head);
ListNode temp2 = virtus;
//遍历链表,获取链表长度
while(temp != null){
length++;
temp = temp.next;
}
//获取被删除节点的前一个节点
for(int i = 0;i< length - n;i++){
temp2 = temp2.next;
}
temp2.next = temp2.next.next;
return virtus.next;
}
}
Este es el código que escribí directamente. Nota
(1) La declaración que define el nodo virtual :, el ListNode virtus = new ListNode(0 ,head);
primer parámetro se establece en 0, porque val es un tipo int, y no presté atención a escribir "" al principio .
(2) Preste atención al último retorno virtus.next; el retorno no es temp2, temp2 se usa como nodo auxiliar para cambiar el nodo en la lista enlazada original, y el nodo virtual virtus es siempre el mismo. Después del siguiente, puede obtener la lista vinculada modificada.