leetcode206-反转链表
思路
- 方法一,递归。将
head
节点和后续所有节点看做两个部分,对后续部分执行递归函数,然后将两部分组合起来。关键在于head
节点的next
指向的是除head
以外后续所有节点反转后的最后一个节点。 - 方法二,迭代。使用双指针依次修改每个节点的next即可。
要点
- 递归法要排除
head
或head.next
为null
的情形。 - 迭代双指针法最后返回的是
pre
。
代码
递归版:
class Solution {
public ListNode reverseList(ListNode head) {
if(head==null || head.next==null)
return head;
ListNode t=reverseList(head.next);
head.next.next=head;
head.next=null;
return t;
}
}
迭代版(双指针):
class Solution {
public ListNode reverseList(ListNode head) {
if(head==null || head.next==null)
return head;
ListNode p=head;
ListNode pre=null;
while(p!=null){
ListNode t=p.next;
p.next=pre;
pre=p;
p=t;
}
return pre;
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】