美文网首页
翻转单链表

翻转单链表

作者: 远o_O | 来源:发表于2017-08-21 10:32 被阅读25次
    • 在有关链表的题目中,最需要注意的地方就是各个结点引用的调整,否则很容易因为混乱的指向导致死循环等情况。
    • 技巧:定义引用指向(保存)某个结点,防止由于调整链表结构,导致某些结点丢失。
    • 对于翻转单链表一般有两种做法:
      • 1、逐个翻转,保存当前结点的前一个结点,然后调整指向。
      • 2、不断的将后面的链表丢到头节点的后面,然后将头节点丢到最后面。

    方法一:

        /**
         * 方法一:逐个翻转
         * @param head
         * @return
         */
        public static ListNode reverse(ListNode head) {
            if (head == null)
                return null;
    
            ListNode pre = null;
            ListNode cur = head;
            while (cur != null)
            {
                ListNode temp = cur.next;
                cur.next = pre;
                pre = cur;
                cur = temp;
            }
    
            return pre;
        }
    

    方法二:

        //方法二:不断选择后一个结点,插入到头节点后面
        public static ListNode re(ListNode head) {
            if (head == null) return null;
    
            if (head.next == null)
                return head;
    
            if (head.next.next == null){
                ListNode n = head.next;
                head.next = null;
                n.next = head;
                return n;
            }
    
            ListNode cur = head.next.next;
            ListNode pre = head.next;
            while (cur != null){
                //临时结点,存放当前结点的下一个结点
                ListNode temp = cur.next;
                //将cur的前一个结点指向cur的下一个结点
                pre.next = temp;
                //解除cur.next的先前指向,重定向为head下一个结点。
                cur.next = head.next;
                //解除head的先前指向,重定向为cur
                head.next = cur;
                //调整引用,cur向后一位
                cur = temp;
            }
    
            //添加引用到头节点的下一个结点,即翻转链表后的新头结点。
            ListNode newNode = head.next;
            //移动头节点到尾部
            pre.next = head;
            //解除下一个指向的引用,避免死循环
            head.next = null;
            return newNode;
        }
    

    https://github.com/yuanoOo/Algorithm/tree/master/Linked%20List

    相关文章

      网友评论

          本文标题:翻转单链表

          本文链接:https://www.haomeiwen.com/subject/lihcdxtx.html