LeetCode——206. 反转链表

题目描述

题干:
反转一个单链表。

示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL

题解思路

反转单链表,又是个链表的经典题目,当时学到的最棒的方法就是头插法,这里就是没有头结点的情况,比有头结点的复杂些

就是新定义一个节点不断循环代替原来链表的元素,使得重新得到一条新的反转链表,还得自己画出图来就容易理解了

至于递归写法,链表这个结构就很适合递归方法,因为它很符合递归三要素:
  1. 大问题可以拆成俩个子问题
  2. 子问题求解方法与大问题相同
  3. 存在最小的子问题

但是递归代码我觉得十分晦涩难懂,精选有视频讲解的大佬的题解,可以去观摩学习一下

正确代码

    //头插法迭代
    public static ListNode reverseList1(ListNode head){
        ListNode newHead = null;
        ListNode curr = head;

        while (curr != null){
            ListNode next = curr.next;
            curr.next = newHead;
            newHead = curr;
            curr = next;
        }
        return newHead;
    }

    //递归
    public static ListNode reverseList2(ListNode head){
        if (head == null || head.next == null){
        return head;
        }
        ListNode newHead = reverseList2(head.next);
        head.next.next = head;
        head.next = null;
        return newHead;
    }

总结

其实到最后递归的方法我也太明白,我实在不知道那个next到底指的是谁,果然我还停留在斐波那契函数的水平,但我下次遇到一定就会理解了

如果文章存在问题或者有更好的题解,欢迎大牛在评论区斧正和评论出来,各自努力,你我最高处见
posted @ 2021-03-23 20:36  21岁还不是架构师  阅读(21)  评论(0编辑  收藏  举报