【Leetcode链表】反转链表 II(92)
题目
反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。
说明:
1 ≤ m ≤ n ≤ 链表长度。
示例:
输入: 1->2->3->4->5->NULL, m = 2, n = 4
输出: 1->4->3->2->5->NULL
解答
一轮指针变换,时间复杂度O(n),空间复杂度O(1)
首先,在链表头部新建两个空节点thead、p2,令p、p3指向thead,c指向head,所有指针往后移动m个位置,p3始终和p相差n-m个位置(记录反转链表的第一个节点),开始向后反转n-m个节点。
反转完成后,p处于反转链表的最后一个位置,p3反转链表的第一个位置,p2处于反转链表的前一个节点,c处于反转链表的额后一个节点。因此,令p2指向p,p3指向c即可,另外需要注意,若链表从头开始反转,则return p指针即可。
# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None
class Solution:
    def reverseBetween(self, head: ListNode, m: int, n: int) -> ListNode:
        if not head.next or m==n:
            return head
        n2, m2 = n, m
        thead = ListNode(-1)
        thead.next = head
        p, p3 = thead, thead
        p2 = ListNode(-1)
        p2.next = thead
        c = head
        # 指针就位
        while m:
            p2 = p2.next
            p = p.next
            p3 = p3.next
            c = c.next
            m -= 1
        # 反转
        Q = n2-m2
        while Q:
            n = c.next
            c.next = p
            p = c
            c = n
            Q -= 1
        p2.next = p
        p3.next = c
        # 从头反转
        if m2==1 and n2!=m2:
            return p
        return thead.next
												
											【Leetcode链表】反转链表 II(92)的更多相关文章
- Leetcode 25. Reverse Nodes in k-Group 以每组k个结点进行链表反转(链表)
		
Leetcode 25. Reverse Nodes in k-Group 以每组k个结点进行链表反转(链表) 题目描述 已知一个链表,每次对k个节点进行反转,最后返回反转后的链表 测试样例 Inpu ...
 - leetcode 206. 反转链表 及 92. 反转链表 II
		
206. 反转链表 问题描述 反转一个单链表. 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1-> ...
 - LeetCode 206. 反转链表(Reverse Linked List) 16
		
206. 反转链表 206. Reverse Linked List 题目描述 反转一个单链表. 每日一算法2019/5/19Day 16LeetCode206. Reverse Linked Lis ...
 - leetcode 练习--反转链表
		
最近开始学习数据结构和算法的学习,也自然开始在 leetcode 上练习,所以每周大概会分享做过的leetcode 练习,尽量做到每天更新一道题目. 作为 leetcode 练习笔记的第一道题目,选择 ...
 - 每天一道面试题LeetCode 206 -- 反转链表
		
LeetCode206 反转链表 思路 代码 # # @lc app=leetcode.cn id=206 lang=python3 # # [206] 反转链表 # # https://leetco ...
 - leetCode:206 反转链表
		
206. 反转链表 题目:反转一个单链表. 进阶:链表可以迭代或递归地反转.你能否两个都实现一遍? 非递归代码: class Solution { public ListNode reverseLis ...
 - LeetCode 206——反转链表
		
对单链表进行反转有迭代法和递归法两种. 1. 迭代法 迭代法从前往后遍历链表,定义三个指针分别指向相邻的三个结点,反转前两个结点,即让第二个结点指向第一个结点.然后依次往后移动指针,直到第二个结点为空 ...
 - 力扣(LeetCode)反转链表 个人题解
		
反转一个单链表. 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 进阶:你可以迭代或 ...
 - LeetCode 206.反转链表(Python3)
		
题目: 反转一个单链表. 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 进阶:你可 ...
 - Java实现 LeetCode 206 反转链表
		
206. 反转链表 反转一个单链表. 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL ...
 
随机推荐
- nfsv3 vs nfsv4
			
https://www.quora.com/What-is-the-difference-between-NFSv3-and-NFSv4
 - PHP 缓存详解
			
为什么要使用缓存 一个网站或者一个应用的标准流程是浏览器向应用服务器发出请求,应用服务器做一些计算和逻辑判断之后再请求数据库,数据库收到请求后在经过计算将数据返回给应用服务器,应用服务器再次计算后把数 ...
 - pc端拖拽
			
var move=document.getElementsByClassName("page1_2")[0]; var startX=0; var startY=0; var x= ...
 - Vue开发警告[Vue warn]: Avoid replacing instance root $data. Use nested data properties instead.
			
Avoid replacing instance root $data. Use nested data properties instead. 翻译 避免替换实例根$data.请改用嵌套数据属性 错 ...
 - invalid use of null value
			
给mysql的数据表的一个字段插入数据,不成功, 然后在数据表设计中,把不是null勾选上,又提示 invalid use of null value 这种情况比较尴尬 只能删掉这一个字段,然后新建一 ...
 - neo4j中对节点关系和聚类的思考
			
由于neo4j在查找过程中具有事务,所以查询的速度非常慢!给出的建议如下: 一,将所有查询放在一个Session中,当所有查询完毕以后在关闭Driver和Session: 二,使用neo4j连接池,使 ...
 - 模板方法(Template Method)(父类声明算法骨架,子类具体不同实现)
			
在阎宏博士的<JAVA与模式>一书中开头是这样描述模板方法(Template Method)模式的: 模板方法模式是类的行为模式.准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式 ...
 - python基础--类的继承以及mro
			
继承: 什么是继承: 继承是一种关系,描述两个对象之间什么是什么的关系 在程序中,继承描述的是类和类之间的关系 例如 a继承了b,a就能直接使用b已经存在的方法和属性了 a称之为子类,b称之为父类,成 ...
 - Breakpoint 断点只生效一次
 - Linux远程管理Windows程序Rdesktop详解
			
#rpm –q rdesktop //查找是否已经安装 #yum install rdesktop //使用yum安装 rde ...