参考来源>
自己的理解
Node cur = head.next;
Node cur_next = null;
Node reverseHead = new Node(0);//全新的空节点,用于存放反转的节点
while(cur != null){//cur不为空即为遍历结束
cur_next = cur.next;
cur.next = reverseHead.next;//这里的rhead.next会把ur.next给占用了,因此需要提前保留cur.next到cur_next
reverseHead.next = cur;
cur = cur_next;
System.out.println(reverseHead.toString());
// System.out.println();
}
head.next = reverseHead.next;
假设链表为 1>2>3>4
(1)不算头结点,把第一个节点设置为当前节点,即为cur,此时的cur的next 是指向原链表(2,3,4),需要把这个指向关系给断掉,就让cur的next指向一个新建q为null,这个时候第一个节点和q就组成了新的链表,cur.next是null,就不是原链表(2,3,4)了,这个时候再把第一个节点(cur)与q(null)替换成q,作为下一阶段的q
(2)我们在把第一个节点给拎出来的时候,还需要把cur.next用中间变量给保存下来,不然就无法进行下一阶段==》cur_next = cur.next
(3)此时可以发现,这个单链表的逆是反着来构建的,先建尾部,在以此倒推,第一个元素已经和q组成了链表的最尾部,并让我们设置为q,再把保存的cur_next变为cur,让剩下的234,继续上诉123步骤。
来源:CSDN
作者:artist_244926
链接:https://blog.csdn.net/artist_244926/article/details/104346813