今天来总结下关于链表的反转操作

目录:

- 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相关推荐

  1. 【编程2】单链表+单链表反转(LeetCode. 206)

    文章目录 一.链表 二.单链表 1.基本概念 (1)单链表 (2)头指针--必有元素 (3)头结点--非必需元素 (4)尾结点 2.查找操作 3.插入操作 4.删除操作 三.设计思想-- 时间 < ...

  2. LeetCode 206. 反转链表 Reverse Linked List

    5-1 链表,在节点间穿针引线 Reverse Linked List 题目: LeetCode 206. 反转链表 反转一个单链表. 示例: 输入: 1->2->3->4-> ...

  3. python怎么反转单链表_单链表反转python实现代码示例

    单链表的反转可以使用循环,也可以使用递归的方式 1.循环反转单链表 循环的方法中,使用pre指向前一个结点,cur指向当前结点,每次把cur->next指向pre即可. 代码: class Li ...

  4. python单链表实现具体例子_Python实现数据结构线性链表(单链表)算法示例

    本文实例讲述了Python实现数据结构线性链表(单链表)算法.分享给大家供大家参考,具体如下: 初学python,拿数据结构中的线性链表存储结构练练手,理论比较简单,直接上代码. #!/usr/bin ...

  5. 【C++】链表反转逆序|建立、删除、修改、插入|linux内核链表与普通链表

    目录 C++实现链表逆序 链表的建立.删除.修改.插入 linux内核链表与普通链表 C++实现链表逆序 实现链表逆序,首先要有一个链表,下面是链表的结构体: typedef struct listn ...

  6. 单链表反序(反转)C++实现

    问题描述 就是给一个链表,求出反转后的链表,比如1 2 3 4 5反转后为5 4 3 2 1. 链表的基础定义及实现参考博文:http://blog.csdn.net/dawn_after_dark/ ...

  7. 【区块反转】【链表合并】【反转链表】【链表元素分类】【链表去重】【重排链表】

    目录 说明: 1110 区块反转 输入格式: 输出格式: 输入样例: 输出样例: 1105 链表合并 输入格式: 输出格式: 输入样例: 输出样例: 1025 反转链表 输入格式: 输出格式: 输入样 ...

  8. python单链表类_python 链表类

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 一般我们都构造双向循环链表. 二 python单向链表实现1 单项链表实现app ...

  9. LeetCode 206. 反转链表 双指针法 辅助结点 递归

    题目链接 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表. 提示: 链表中节点的数目范围是 [0, 5000] -5000 <= Node.val <= 5000 进阶: ...

最新文章

  1. ueditor上传组件显示乱码_最全面的移动端 UI组件设计详解:中篇
  2. Caused by: org.apache.ibatis.reflection.ReflectionException我碰到的情况,原因不唯一
  3. 搭建Mysql-proxy实现主从同步读写分离
  4. linux查看终端进程,Linux查看进程
  5. 开源医学图像处理平台NiftyNet简介
  6. Python数据处理 PCA/ZCA 白化(UFLDL教程:Exercise:PCA_in_2DPCA_and_Whitening)
  7. 做游戏,学编程(C语言) 10 僵尸危机
  8. 凸集、锥、凸锥、正常锥的辨析
  9. 1951-2021年至今全国气象数据(逐日、逐月、逐年)
  10. win10怎么用计算机二进制,Win10计算器怎么算二进制_win10计算器二进制使用教程...
  11. html下拉栏去掉样式,怎么去掉下划线样式?
  12. 如何制作网页棋牌游戏
  13. python输出二进制数_Python计算二进制数及输出补码
  14. 关于Liferay的deactivate user的研究
  15. 未来十年最容易消失和最不易被取代的22个职业,越看越心惊!附相关专业
  16. 使用petalinux编译工程,报错:Unable to parse input tree,已解决
  17. 如何使用IceSword冰刃
  18. jpi多表联查_多表连接查询详解
  19. java毕业生设计在线直播平台计算机源码+系统+mysql+调试部署+lw
  20. (ECCV-2018)用于视频识别的多光纤网络

热门文章

  1. Linux实现ppp拨号4G模块联网全球APN之亚美尼亚(Armenian)
  2. 1761:神奇的口袋(2)
  3. 了解什么是形式化方法?
  4. linux下的pmap命令
  5. 云测试(cloud testing)之我见
  6. LU分解完成利用节点电压法的简易电路求解程序(二)
  7. element ui背景图_vue+element-ui如何为元素设置背景图片
  8. three.js 加载obj+mtl模型
  9. JAVA 多个空格分割字符串
  10. IntelliJ IDEA|热部署