Lined List 链表总结 Reverse链表 - 反转(python) leetcode 206 92
今天来总结下关于链表的反转操作
目录:
- 206 Reverse Linked List
- 92 Reverse Linked List II
解读:这道reverse操作,我们采用two pointers的做法,这是非常常用于链表的一种解法。pre设为None,cur作为head的代替reference。这里的话我们对需要进行一下的思维:
1. cur.next 需要转换为之前的 cur.next = pre
2. 对pre和cur进行更新 pre = cur
cur = 原来的cur.next
3.这里的需要注意一个地方 cur.next 因为进行改变所以我们需要用一个变量来保存
4, 最后return 什么,这里我的思路是我们考虑的是while cur,所以最后应该返回的pre
class ListNode(object):def __init__(self, val=0):self.val = valself.next = Noneclass Solution(object):def reverse(self, head: ListNode) -> ListNode:""""""if not head:return headpre, cur = None, headwhile cur:temp = cur.nextcur.next = pre # reverse# updatepre = curcur = temp return pre
解读:当前这道题目我个人觉得是一道相对复杂有趣的,这道题目考查我们链表更新,反转,删除等操作的掌握程度,我们需要巧妙的使用每个node的关系去解决。
首先,这道题我才用two poniters 的思想,以下是我对整个过程的解读:
以example1 为例子
- set up dummy node, dummy.next = head
- define two pointers: leftpre, cur = dummy, head
1.在left之前,正常的链表更新即可,结束的时候
for i in range()...
leftpre 正好是left前的node,leftpre.next = ListNode(val=2) 我只是告诉自己这个是啥,后面要用
2.进入reverse,这里第一个考虑的是循环几次,正解:right - left + 1 (自己举个例子算下)
这里和leetcode206 的链表反转操作一样:
- define new variable: pre = None
for j in range(right - left + 1):
temp 记录当前cur.next
cur.next指向之前的node (pre)
对pre和cur进行更新: pre = cur, cur = temp
在结束反转后,pre指向在index right的位子,cur指向 index right + 1, 如图
最后就是收尾,合成一个新的链表
这里采用了一个很有趣巧妙的法子,最开始,在进行反转之前我们保存了一个leftpre,
leftpre.next 一直指向的是2,此时:4 又是pre
我们的需求是2要指向5而不是null,leftpre指向4,由此:
leftpre.next.next = cur
leftpre.next = pre
class ListNode(object):def __init__(self, val=0):self.val = valself.next = Noneclass Solution(object):def reverse(self, head: ListNode, left: int, right: int) -> ListNode:""""""# before leftdummy = ListNode(val=0)dummy.next = headleftpre, cur = dummy, headfor i in range(left - 1):leftpre = leftpre.nextcur = cur.next# while reversingpre = Nonefor j in range(right - left + 1):temp = cur.nextcur.next = prepre = curcur = temp# update after reversingleftpre.next.next = curleftpre.next = prereturn dummy.next
Lined List 链表总结 Reverse链表 - 反转(python) leetcode 206 92相关推荐
- 【编程2】单链表+单链表反转(LeetCode. 206)
文章目录 一.链表 二.单链表 1.基本概念 (1)单链表 (2)头指针--必有元素 (3)头结点--非必需元素 (4)尾结点 2.查找操作 3.插入操作 4.删除操作 三.设计思想-- 时间 < ...
- LeetCode 206. 反转链表 Reverse Linked List
5-1 链表,在节点间穿针引线 Reverse Linked List 题目: LeetCode 206. 反转链表 反转一个单链表. 示例: 输入: 1->2->3->4-> ...
- python怎么反转单链表_单链表反转python实现代码示例
单链表的反转可以使用循环,也可以使用递归的方式 1.循环反转单链表 循环的方法中,使用pre指向前一个结点,cur指向当前结点,每次把cur->next指向pre即可. 代码: class Li ...
- python单链表实现具体例子_Python实现数据结构线性链表(单链表)算法示例
本文实例讲述了Python实现数据结构线性链表(单链表)算法.分享给大家供大家参考,具体如下: 初学python,拿数据结构中的线性链表存储结构练练手,理论比较简单,直接上代码. #!/usr/bin ...
- 【C++】链表反转逆序|建立、删除、修改、插入|linux内核链表与普通链表
目录 C++实现链表逆序 链表的建立.删除.修改.插入 linux内核链表与普通链表 C++实现链表逆序 实现链表逆序,首先要有一个链表,下面是链表的结构体: typedef struct listn ...
- 单链表反序(反转)C++实现
问题描述 就是给一个链表,求出反转后的链表,比如1 2 3 4 5反转后为5 4 3 2 1. 链表的基础定义及实现参考博文:http://blog.csdn.net/dawn_after_dark/ ...
- 【区块反转】【链表合并】【反转链表】【链表元素分类】【链表去重】【重排链表】
目录 说明: 1110 区块反转 输入格式: 输出格式: 输入样例: 输出样例: 1105 链表合并 输入格式: 输出格式: 输入样例: 输出样例: 1025 反转链表 输入格式: 输出格式: 输入样 ...
- python单链表类_python 链表类
广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 一般我们都构造双向循环链表. 二 python单向链表实现1 单项链表实现app ...
- LeetCode 206. 反转链表 双指针法 辅助结点 递归
题目链接 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表. 提示: 链表中节点的数目范围是 [0, 5000] -5000 <= Node.val <= 5000 进阶: ...
最新文章
- ueditor上传组件显示乱码_最全面的移动端 UI组件设计详解:中篇
- Caused by: org.apache.ibatis.reflection.ReflectionException我碰到的情况,原因不唯一
- 搭建Mysql-proxy实现主从同步读写分离
- linux查看终端进程,Linux查看进程
- 开源医学图像处理平台NiftyNet简介
- Python数据处理 PCA/ZCA 白化(UFLDL教程:Exercise:PCA_in_2DPCA_and_Whitening)
- 做游戏,学编程(C语言) 10 僵尸危机
- 凸集、锥、凸锥、正常锥的辨析
- 1951-2021年至今全国气象数据(逐日、逐月、逐年)
- win10怎么用计算机二进制,Win10计算器怎么算二进制_win10计算器二进制使用教程...
- html下拉栏去掉样式,怎么去掉下划线样式?
- 如何制作网页棋牌游戏
- python输出二进制数_Python计算二进制数及输出补码
- 关于Liferay的deactivate user的研究
- 未来十年最容易消失和最不易被取代的22个职业,越看越心惊!附相关专业
- 使用petalinux编译工程,报错:Unable to parse input tree,已解决
- 如何使用IceSword冰刃
- jpi多表联查_多表连接查询详解
- java毕业生设计在线直播平台计算机源码+系统+mysql+调试部署+lw
- (ECCV-2018)用于视频识别的多光纤网络