关阿姨带你横扫LeetCode系列之反转链表|Java 刷题打卡

422 阅读1分钟

关阿姨正在参加「Java主题月 - Java 刷题打卡」,详情查看 活动链接

首先跟大家阐明一点就是,每道算法题都有多种解法,我们只讲LeetCode上几种优秀的解题思路~,希望可以帮助到大家,那我们先来看下题目描述吧~

一、题目描述:

反转一个单链表。 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 进阶: 你可以迭代或递归地反转链表。你能否用两种方法解决这道题?

二、思路分析:

通过观察,可以发现,我们需要不断的修改当前节点指向的next节点,因此可以使用递归方法,递归的出口就是,当链表中的节点next指向NULL时,即链表的最后一个节点,然后进行修改当前指向的next为前一个节点,具体实现如下

代码实现

public ListNode reverseList(ListNode head) {
         if (head == null || head.next == null) {
            return head;
        }
        //这里的newHead就是最后一个节点
        ListNode newHead = reverseList(head.next);
        //如果链表是 1->2->3->4->5,那么此时的newHead就是5
		//而head是4,head的下一个是5,下下一个是空
		//所以让head.next.next=head 就是让5->4
        head.next.next = head;
        //当将链表进行反转后,最后一个进行反转的节点的next必须指向空,否则会出现循 环
        head.next = null;
        return newHead;
    }
    

刷题总结

如果大家还有其他解题思路,只要能实现要求,都是没问题的,条条大路通罗马,不要仅仅局限于我讲的这种解法哈~,优秀的思路和代码更具备学习意义,我们一起加油吧