206.反转链表
206.翻转链表
题目
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
示例 1:
输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]
示例 2:
输入:head = [1,2]
输出:[2,1]
示例 3:
输入:head = []
输出:[]
提示:
链表中节点的数目范围是 [0, 5000]
-5000 <= Node.val <= 5000
进阶:链表可以选用迭代或递归方式完成反转。你能否用两种方法解决这道题?
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-linked-list
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
题解-迭代法
链表的交换,需要知道当前节点和他的前一个节点
class Solution {
public ListNode reverseList(ListNode head) {
ListNode pre = null;
ListNode tmp;
while(head!=null){
tmp = head.next; //先把当前元素的后一个元素记录下来,防止断链
head.next = pre;
pre=head;
head=tmp;
}
return pre;
}
}
题解-递归法
递归的终止条件
当遍历到最后一个节点就可以开始返回了
if(head==null||head.next==null)return head;
//head是排除刚进来就为空的情况
递归的单层逻辑
根据下图可以看见,递归的返回最后一个节点,也就是翻转之后的新节点,这个值需要层层传递下去
单层递归需要做的就是,把当前的节点加在翻转成功的节点的后面。
class Solution {
public ListNode reverseList(ListNode head) {
if(head==null||head.next==null)return head;
ListNode newHead= reverseList(head.next);
head.next.next = head;
head.next=null;
return newHead; //层层传递新的头节点
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】