美文网首页
翻转单链表

翻转单链表

作者: 远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

相关文章

  • 翻转单链表

    翻转单链表 方法一:将单链表头插到一个新链表中 浪费空间,不过简单 方法二:使用三个指针遍历单链表,逐个点进行翻转...

  • 单链表反转的递归方法和非递归方法

    链表的节点可以定义为: 测试的输入数据,每次使用root作为方法的入参 使用循环来翻转单链表 思路 翻转单链表,其...

  • 链表的操作和算法相关

    github->demo1、创建(单链表、双链表、循环链表)2、翻转单链表(递归和非递归)3、判断链表是否存在环。...

  • 单链表翻转

    单链表的就地逆置:就地逆置即空间复杂度为O(1)一:用数组存储单链表的值,然后重新逆序赋值,效率较低。二:利用三个...

  • 单链表翻转

  • 翻转单链表

    在有关链表的题目中,最需要注意的地方就是各个结点引用的调整,否则很容易因为混乱的指向导致死循环等情况。 技巧:定义...

  • 单链表翻转

    循环 递归

  • 翻转单链表

  • 翻转单链表

    结果: 完整测试代码:

  • Reverse LinkList

    问题 翻转单链表举例:原始链表: 1->2->3->4就地翻转,翻转后: 4->3->2->1 主要思路 需要两个...

网友评论

      本文标题:翻转单链表

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