单向链表反转图解

单向链表反转的方法代码:

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。

  1. 反转单向列表需要先创建一个新的头节点,从左到右,先将第一个方块(第一个Node)的指针指向null,此时第一个方块指向第二个方块的指针被回收(虚线表示),然后将新的头节点指向第一个方块

  2. 将当前节点移到第二个方块,将第二个方块的指针指向第一个方块,然后将新的头节点指向第二个方块,此时头节点指向第一个方块的指针被回收

重复以上这个过程,最后需要注意的是要将旧的头节点指向最后一个方块,方法执行完毕,由于新的头节点是一个局部变量,被JVM回收。

posted @ 2021-04-14 15:11  imissinstagram  Views(291)  Comments(0)    收藏  举报