当前位置:网站首页>【LeetCode】206. Reverse linked list
【LeetCode】206. Reverse linked list
2022-08-02 02:58:00 【Crispy~】
题目
给你单链表的头节点 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
进阶:链表可以选用迭代或递归方式完成反转.你能否用两种方法解决这道题?
题解
使用迭代方法
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListNode(int x, ListNode *next) : val(x), next(next) {} * }; */
class Solution {
public:
ListNode* reverseList(ListNode* head) {
ListNode* result = new ListNode(0);
while(head)
{
ListNode* tmp = head;
head = head->next;
tmp->next = result->next;
result->next = tmp;
}
return result->next;
}
};
递归
比较难理解,Here is someone else's solution
/** * 以链表1->2->3->4->5举例 */
public ListNode* reverseList(ListNode* head) {
if (head == null || head.next == null) {
/* 直到当前节点的下一个节点为空时返回当前节点 由于5没有下一个节点了,所以此处返回节点5 */
return head;
}
//递归传入下一个节点,目的是为了到达最后一个节点
ListNode* newHead = reverseList(head.next);
/* 第一轮出栈,head为5,head.next为空,返回5 第二轮出栈,head为4,head.next为5,执行head.next.next=head也就是5.next=4, 把当前节点的子节点的子节点指向当前节点 此时链表为1->2->3->4<->5,由于4与5互相指向,所以此处要断开4.next=null 此时链表为1->2->3->4<-5 返回节点5 第三轮出栈,head为3,head.next为4,执行head.next.next=head也就是4.next=3, 此时链表为1->2->3<->4<-5,由于3与4互相指向,所以此处要断开3.next=null 此时链表为1->2->3<-4<-5 返回节点5 第四轮出栈,head为2,head.next为3,执行head.next.next=head也就是3.next=2, 此时链表为1->2<->3<-4<-5,由于2与3互相指向,所以此处要断开2.next=null 此时链表为1->2<-3<-4<-5 返回节点5 第五轮出栈,head为1,head.next为2,执行head.next.next=head也就是2.next=1, 此时链表为1<->2<-3<-4<-5,由于1与2互相指向,所以此处要断开1.next=null 此时链表为1<-2<-3<-4<-5 返回节点5 出栈完成,最终头节点5->4->3->2->1 */
head.next.next = head;
head.next = null;
return newHead;
}
边栏推荐
- DVWA安装教程(懂你的不懂·详细)
- 【LeetCode】206.反转链表
- analog IC layout-Parasitic effects
- 22-08-01 西安 尚医通(01)跨域配置、Swagger2、R类、统一异常处理和自定义异常、Logback日志
- IMU预积分的简单理解
- 架构:应用架构的演进以及微服务架构的落地实践
- node:internal/modules/cjs/loader:936 throw err; ^ Error: Cannot find module ‘./scope‘
- 【LeetCode】145. Postorder Traversal of Binary Tree
- 第11章_数据库的设计规范
- 搭建zabbix监控及邮件报警(超详细教学)
猜你喜欢
随机推荐
(1) Redis: Key-Value based storage system
AcWing 1053. Repair DNA problem solution (state machine DP, AC automata)
Lombok
【LeetCode】145. Postorder Traversal of Binary Tree
因为WiFi原因navicat 无法连接数据库Mysql
JSP Webshell 免杀
20. 用两个栈实现队列
Flask入门学习教程
MySQL六脉神剑,SQL通关大总结
2022牛客多校四_G M
PHP WebShell 免杀
mockjs生成假数据的基本使用
灰度传感器、、、diy原理。。图
KICAD 小封装拉线卡顿问题 解决方法
常见的SQL面试题:经典50例
Flask之路由(app.route)详解
接口测试神器Apifox究竟有多香?
极大似然估计
树链剖分-
7、MySQL Workbench 导出导入数据库









