Descripción del título
Ingrese una lista vinculada, después de invertir la lista vinculada, genere el encabezado de la nueva lista vinculada.
Ejemplo 1
输入
{
1,2,3}
返回值
{
3,2,1}
Solución
Tome 3 nodos como ejemplo:
-
Utilice pre para registrar el nodo anterior del nodo actual
-
Use next para registrar el siguiente nodo del nodo actual
-
Definir un nuevo nodo cur y asignarlo a la cabeza
El nodo actual a no está vacío, ingrese al bucle, primero registre la posición del siguiente nodo de a next = b; luego deje que el puntero de un apunte a
la posición de pre y cur. Solo porque la posición del siguiente nodo se acaba de registrar , la lista enlazada Sin romper, dejamos que cur vaya a la posición de b.
El nodo actual es que b no está vacío, primero registre la posición del siguiente nodo, deje que b apunte a la posición de pre, es decir, la posición de a, y mueva pre y head. El
nodo actual c no está vacío, registre la posición del siguiente nodo, y deje que c apunte a b, Mueva pre y cur al mismo tiempo, en este momento cur está vacío, salta y vuelve a pre.
public class Solution {
public ListNode ReverseList(ListNode head) {
if(head == null || head.next == null) {
return head;
}
ListNode cur = head;
ListNode pre = null;
ListNode next = null;
while(cur != null) {
next = cur.next;
cur.next = pre;
pre = cur;
cur = next;
}
return pre;
}
}