单向链表反转图解
单向链表反转的方法代码:
public void reverseList(Node head) {
//如果单向链表为空,或者只有一个节点,无需反转,直接返回
if (head.next == null || head.next.next == null) {
return;
}
//定义一个辅助指针
Node cur = head.next;
Node next = null;//指向当前节点[cur]的下一个节点
Node reverseHead = new Node(0, "", "");
//遍历原来的链表,每遍历一个,就将其取出,并放在新的链表reverseHead的最前端
while (cur != null) {
next = cur.next;//暂时保存当前节点的下一个节点,后面需要使用
cur.next = reverseHead.next;//将cur的下一个节点指向新的链表的最前端
reverseHead.next = cur;//将cur连接到新的链表上
cur = next;//让cur后移
}
//将head.next指向reverseHead.next
head.next = reverseHead.next;
}

圆圈代表头节点,这个Node里面不包含信息,只有一个序号0。
-
反转单向列表需要先创建一个新的头节点,从左到右,先将第一个方块(第一个Node)的指针指向null,此时第一个方块指向第二个方块的指针被回收(虚线表示),然后将新的头节点指向第一个方块
-
将当前节点移到第二个方块,将第二个方块的指针指向第一个方块,然后将新的头节点指向第二个方块,此时头节点指向第一个方块的指针被回收
重复以上这个过程,最后需要注意的是要将旧的头节点指向最后一个方块,方法执行完毕,由于新的头节点是一个局部变量,被JVM回收。
本文来自博客园,作者:imissinstagram,转载请注明原文链接:https://www.cnblogs.com/LostSecretGarden/p/14658018.html

浙公网安备 33010602011771号