美文网首页
面试题24:反转链表

面试题24:反转链表

作者: 繁星追逐 | 来源:发表于2019-11-08 17:31 被阅读0次

输入一个链表的头结点,反转链表后,并返回反转链表的头结点。

为了避免断裂现象的发生,应该设置三个节点指针去检查。即为了在指针指向改变之前记录下下一个节点,改变后记录下下一次改变的上一个节点,即当前节点。当前节点下移到记录的下一个节点。

代码如下:

class ListNode {
         int val;
         ListNode next = null;

         ListNode(int val) {
             this.val = val;
         }


         /***利用三个指针操作,通过将所有指向反向
          * 最后一个节点作为头结点
          *
          * @param head
          * @return
          */
         public ListNode ReverseList(ListNode head) {
              if (head == null){
                  return null;
              }
              ListNode cur = head;
              ListNode pre = null;
              ListNode next = null;
              while (cur != null){
                 //在cur改变指向之前,先用next保存cur原来的指向,防止节点出现断链
                 next = cur.next;
                 //先让其指向空节点
                 cur.next = pre;
                 //把上个节点赋给空节点
                 pre = cur;
                 //这时候,cur的指向已经改变
                 cur = next;
              }
            return pre;
         }

递归反转链表
递归栈记录下链表的顺序后,每个节点都当做头结点来处理
代码如下:

/**
          * 递归每次改变头结点输入,作头结点和后节点的交换
          * @param head
          * @return
          */
         public ListNode ReverseList2(ListNode head) {
             if (head == null || head.next == null){
                 return head;
             }
             //递归结果为最后一个节点
             ListNode newHead = ReverseList2(head.next);
             //交换每个新头节点的指向
             ListNode pNode = head.next;
             pNode.next = head;
             //去掉头结点指向
             head.next = null;

             return newHead;
         }
     }

相关文章

  • 反转链表

    《剑指offer》面试题24:输入一个链表,反转链表后,输出新链表的表头。 思路:反转链表就是将链表中每一个节点的...

  • 剑指offer第二版-24.反转链表

    本系列导航:剑指offer(第二版)java实现导航帖 面试题24:反转链表 题目要求:如题 解题思路:想要链表反...

  • 数据结构之 swift 实现链表反转

    链表反转很熟悉的面试题,关于链表的基础知识就不再累赘了,如何swift实现链表的反转。 传入链表的头结点 返回一个...

  • 链表的反转

    反转链表是一道很基本的面试题,通过更改节点之间的链接来反转链表。 1.单链表的反转 题目 示例 用一幅图来解释:这...

  • 1.数据结构-链表问题

    链表相关问题 删除节点 链表去重 有环链表 反转链表 链表排序 链表相交 其他问题 面试题 02.03. 删除中间...

  • 面试题24:反转链表

    题目描述: 输入一个链表,反转链表后,输出新链表的表头。 解题思路: 为防止链表出现断裂的情况,需要定义3个指针,...

  • 面试题24:反转链表

    输入一个链表的头结点,反转链表后,并返回反转链表的头结点。 为了避免断裂现象的发生,应该设置三个节点指针去检查。即...

  • 面试题24: 反转链表

    开始在leetcode上做题了, 这样不用自己编写测试代码了, 而且测试更全面, 方便哟 递归法

  • 面试题24:反转链表

    题目:输入一个链表,反转链表后,输出新链表的表头。 解题思路:这道题注意思考三个问题:输入的链表头指针是空或者输入...

  • 面试题24:反转链表

    题目:定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。思路:定义三个参数,pre、node...

网友评论

      本文标题:面试题24:反转链表

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