每日leetcode——92. 反转链表 II

CodeCipherMaster
• 阅读 936

题目

给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right 。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表 。

输入:head = [1,2,3,4,5], left = 2, right = 4
输出:[1,4,3,2,5]

输入:head = [5], left = 1, right = 1
输出:[5]

思路

不要陷入206.反转链表的思维误区,206是反转全部链表,所以用递归的思想,一直到链表最后,注意力在链表最后,从后向前逐个反转。

本题的思路,注意力是放在前面:
例如,将 [2,3,4] 翻转,重点不应放在4上,而是放在开头2上,只需要不断将2后的那个节点移到它前面即可:2,(3),4 ——> (3),2,4 ——> 3,2,(4) ——> (4),3,2

def reverseBetween(head, left, right) -> ListNode:
    # 设置虚拟节点,指向头节点
    # 设置虚拟节点的目的是应对边界情况:原链表第一个节点就开始反转
    dummy = ListNode(-1)
    dummy.next = head

    # 初始化pre指针
    pre = dummy

    # 移动pre指针到反转区的前一个节点
    for i in range(left-1):
        pre = pre.next
    
    # cur指针指向反转区的第一个节点,固定在这个节点上不动
    cur = pre.next

    # pre到了反转区前一个节点,开始进行反转,例如pre,2,3,4
    for j in range(right-left):
        # 设置个tmp指针,指向cur的下一个节点
        # pre,2(cur),3(tmp),4
        tmp = cur.next
        # cur指向tmp的下一个节点
        # pre,2(cur),4
        cur.next = tmp.next
        # tmp指向pre的下一个节点
        # 3(tmp),2(cur),4
        tmp.next = pre.next
        # pre指向tmp节点
        # pre,3(tmp),2(cur),4
        pre.next = tmp
    
    return dummy.next
点赞
收藏
评论区
推荐文章
22 22
4年前
【数据结构之链表】详细图文教你花样玩链表
【系列文章推荐阅读】0.提要钩玄文章已经介绍了链式存储结构,介绍了链式存储结构的最基本(简单)实现——单向链表。单向链表,顾名思义,它是单向的。因为单链表的每个结点只有一个数据域和一个指针域,而该指针域只存储了下一个结点的地址,所以我们只能通过某结点找到其直接后继结点,却不能通过某节点找到其直接前驱结点。此外,由于单链表到尾结点(链表的最后一
Caomeinico Caomeinico
3年前
二叉树展开为链表
给你二叉树的根结点root,请你将它展开为一个单链表:展开后的单链表应该同样使用TreeNode,其中right子指针指向链表中下一个结点,而左子指针始终为null。展开后的单链表应该与二叉树先序遍历顺序相同。classSolutionpublicvoidflatten(TreeNoderoot)if
Souleigh ✨ Souleigh ✨
4年前
python实现——最优化算法(二分法、格点法、黄金分割法、牛顿法等)
二分法函数详见rres,此代码使该算法运行了两次pythondefasdf(x):rres8x32x27x3returnrresi2left0right1whilei0:ii1ans0.1mid1(leftrightans)/2
Wesley13 Wesley13
3年前
275,环形链表 II
给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从0开始)。如果 pos 是 1,则在该链表中没有环。说明:不允许修改给定的链表。示例1:输入:head3,2,0,4,pos
Stella981 Stella981
3年前
Linux下V4L2捕捉画面+H264压缩视频+帧缓冲显示视频————结合三个部分工作
前面三篇文章分别介绍了视频捕获、h264视频压缩、帧缓冲显示的实现,现在将他们结合起来摄像头采集到的数据,需要交给视频压缩线程、显示线程使用,那么我采用的方法是使用队列及链表来实现:1.摄像头采集到数据后,分别放入两个处理线程队列中,并将相关信息放入链表中2.两个线程处理完成数据后,调用回调函数,从链表里找到对应的节点,然后释
Wesley13 Wesley13
3年前
HTML如何实现屏显和打印
无意中翻阅CSS,发现里面有两语句:pagebreakbeforepagebreakafter分别对应的参数是:auto;always;left;right;于是尝试建立一张HTML,如下<html  <head  <meta httpequiv"ContentType" cont
Wesley13 Wesley13
3年前
Java实现单链表反转操作
单链表是一种常见的数据结构,由一个个节点通过指针方式连接而成,每个节点由两部分组成:一是数据域,用于存储节点数据。二是指针域,用于存储下一个节点的地址。在Java中定义如下:publicclassNode{privateObjectdata;//数据域privateNodenext;//指针域publicNo
Stella981 Stella981
3年前
LeetCode 92. 反转链表 II(Reverse Linked List II)
题目描述反转从位置_m_到_n_的链表。请使用一趟扫描完成反转。说明:1≤ _m_ ≤ _n_ ≤链表长度。示例:输入:12345NULL,m2,n4输出:14325NULL解题思路本题类似于反转链表
Stella981 Stella981
3年前
LeetCode 142 环形链表 II python
题目描述给定一个链表,返回链表开始入环的第一个节点。如果链表无环,则返回null。说明:不允许修改给定的链表。样例如果不是环,则输出None如果是环,则输出入口节点想法:通过ac141,知道慢节点循环的次数就是环的长度无环的情况不用考虑,直接返回No
Stella981 Stella981
3年前
C#Redis列表List
转载自:https://www.cnblogs.com/5ishare/p/6291034.html一、前戏 在Redis中,List类型是按照插入顺序排序的字符串链表。和数据结构中的普通链表一样,我们可以在其头部(left)和尾部(right)添加新的元素。在插入时,如果该键并不存在,Redis将为该键创建一个新的链表。与此相反,如果链表中所有的元
菜园前端 菜园前端
2年前
什么是链表?
原文链接:什么是链表?链表是有序的数据结构,链表中的每个部分称为节点。可以首、尾、中间进行数据存取,链表的元素在内存中不必是连续的空间,每个节点通过next指针指向下一个节点。优点链表的添加和删除不会导致其余元素位移。缺点无法根据索引快速定位元素。数组和链
CodeCipherMaster
CodeCipherMaster
Lv1
不必恭维不必讨好爱你的人自会给你拥抱
文章
3
粉丝
0
获赞
0