关阿姨正在参加「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;
}
刷题总结
如果大家还有其他解题思路,只要能实现要求,都是没问题的,条条大路通罗马,不要仅仅局限于我讲的这种解法哈~,优秀的思路和代码更具备学习意义,我们一起加油吧