美文网首页程序员
剑指offer----反转链表

剑指offer----反转链表

作者: qming_c | 来源:发表于2018-02-03 14:56 被阅读0次

题目:输入一个链表,反转链表后,输出链表的所有元素。

/*
public class ListNode {
    int val;
    ListNode next = null;

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

方法一 递归

public class Solution {
    ListNode node = null;
    public ListNode ReverseList(ListNode head) {
        if(head == null ||head.next == null){
            return head;
        }
        node = ReverseList(head.next);
    head.next.next = head;
        head.next = null;
        return node;
    }
}

一般情况下反转的问题利用递归代码写起来是比较简洁的,但是也用调用栈过深导致溢出的缺点,并且对递归函数调用前后的的代码块的特点也有要一定的理解。

  • 函数调用之后的代码块一般都是按照递归栈,从栈底向栈顶反向执行的。
  • 函数调用之前的代码快是从栈顶到栈底执行的。
  • 所以判断递归的结束条件要在递归函数的调用之前进行,
  • 而需要进行反向的代码在递归函数调用之后进行。

本题中,最终要返回反转之后的头结点,所以

  • 可以确定return的值为最后一个节点,不断的向上浮动
  • 然后就是节点之间的关系反转
    开始时第k个节点的next指向k+1,要将他反转过来变成k+1的next指向k。这个反转过程要从后向前进行。如果从前向后进行,就会导致1->2, 变成 2->1 和3节点就断开了。如果是反向的话4->5->6 反转之后是4->5<-6,链表仍然是相连接的。

方法二

public class Solution {
    ListNode node;
    public ListNode ReverseList(ListNode head) {
        ListNode first = null;
        ListNode second = null;
        while(head != null){
            first = head.next;
            head.next = second;
            second = head;
            head = first;
        }
        return second;
    }
}

上面使用递归的解释中提到,正向反转的话会出现链表断裂的情况,找不到下一个节点,那么我们可以使用一个指针一直指向下一个节点,然后将这个指针的next指向上一个节点即可。

相关文章

  • 剑指offer----反转链表

    题目:输入一个链表,反转链表后,输出链表的所有元素。 方法一 递归 一般情况下反转的问题利用递归代码写起来是比较简...

  • 反转链表

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

  • 2022-03-26 链表反转回文

    反转链表:java版本: 剑指 Offer II 027. 回文链表[https://leetcode.cn/pr...

  • 24.反转链表

    剑指 Offer II 024. 反转链表[https://leetcode.cn/problems/UHnkqh...

  • 剑指offer:反转链表

    题目分析 输入一个链表,反转链表后,输出链表的所有元素。 代码

  • [剑指offer] 反转链表

    题目描述 输入一个链表,反转链表后,输出新链表的表头。 解题思路 设置三个指针,head为当前节点,pre为当前节...

  • 《剑指Offer》 反转链表

    题目描述 输入一个链表,反转链表后,输出新链表的表头。 源代码

  • 剑指offer:反转链表

    (Leetcode 206: reverse linked list)反转链表是比较重要的题,面试笔试经常会考。做...

  • [剑指Offer]反转链表

    本文首发于我的个人博客Suixin’s Blog原文: https://suixinblog.cn/2019/02...

  • 【剑指 offer】反转链表

    1、题目描述 定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。 样例输入:1->2->3-...

网友评论

    本文标题:剑指offer----反转链表

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