1、单链表翻转

重点:三个变量、当前节点的下一个节点  指向头节点的下一个节点

public static void reverseList(Node head){
        //如果链表为空 则返回
        if (head.next == null){
            return;
        }
        //遍历到的当前节点
        Node cur = head.next;
        //当前节点的下一个节点,后移使用
        Node next = null;
        //定义新的链表头,目的是 将遍历出来的节点,插入到 新头节点 与 新头结点next节点的中间
        Node newHead = new Node(0);
        //为null说明遍历到了链表的末尾
        while (cur!=null){
            //将当前节点的下一个节点  保存到next变量
            next = cur.next;
            //将当前节点的下一个节点  指向头节点的下一个节点
            //这样做之后,当前节点就放到了新链表的头部(新头节点之后)
            //即当前节点的next有包含了新链表的所有node(不含头节点)
            cur.next = newHead.next;
            //新链表头结点的next 指向当前节点
            newHead.next = cur;
            //cur当前节点后移 继续向下遍历
            cur = next;
        }
        //将老链表头指向新链表头  实现翻转
        head.next = newHead.next;
    }

 

posted on 2020-08-18 11:28  audience7510  阅读(116)  评论(0)    收藏  举报