【Leetcode链表】旋转链表(61)
题目
给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数。
示例 1:
输入: 1->2->3->4->5->NULL, k = 2
输出: 4->5->1->2->3->NULL
解释:
向右旋转 1 步: 5->1->2->3->4->NULL
向右旋转 2 步: 4->5->1->2->3->NULL
示例 2:
输入: 0->1->2->NULL, k = 4
输出: 2->0->1->NULL
解释:
向右旋转 1 步: 2->0->1->NULL
向右旋转 2 步: 1->2->0->NULL
向右旋转 3 步: 0->1->2->NULL
向右旋转 4 步: 2->0->1->NULL
解答
思路:先把链表首尾相连,再找到位置断开循环。
通过代码如下:
# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None
class Solution:
    #  时间复杂度O(n),空间复杂度O(1)
    def rotateRight(self, head: ListNode, k: int) -> ListNode:
        if not head or not head.next:
            return head
        # 标记尾节点
        # 统计节点总数,防止k过大循环移动指针而超出时间限制
        c, sum = head, 1
        while c.next:
            sum += 1
            c = c.next
        tail = c
        c.next = head
        p, c = head, head
        p2 = p.next  # 记录将来断开后的首节点
        k = k%sum
        # c先于p指针前k%num个
        while k:
            c = c.next
            k -= 1
        # 在p位置断开
        while c != tail:
            c = c.next
            p = p.next
            p2 = p.next
        p.next = None
        return p2
【Leetcode链表】旋转链表(61)的更多相关文章
- LeetCode:旋转链表【61】
		LeetCode:旋转链表[61] 题目描述 给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数. 示例 1: 输入: 1->2->3->4->5- ... 
- leetcode网解题心得——61. 旋转链表
		目录 leetcode网解题心得--61. 旋转链表 1.题目描述 2.算法分析: 3.用自然语言描述该算法 4.java语言实现 5.C语言实现 leetcode网解题心得--61. 旋转链表 1. ... 
- LeetCode 61:旋转链表 Rotate List
		给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数. Given a linked list, rotate the list to the right by k pla ... 
- Java实现 LeetCode 61 旋转链表
		61. 旋转链表 给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数. 示例 1: 输入: 1->2->3->4->5->NULL, k = ... 
- 【LeetCode】61. 旋转链表
		61. 旋转链表 知识点:链表: 题目描述 给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置. 示例 输入:head = [1,2,3,4,5], k = 2 输出:[4 ... 
- LeetCode 链表(旋转链表61)
		/* * 给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数. * 构造一个环,对链表进行处理. * *实现原理:先遍历一遍,得出链表长度,注意K可能大于len,之后令k% ... 
- LeetCode(61):旋转链表
		Medium! 题目描述: 给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数. 示例 1: 输入: 1->2->3->4->5->NULL, ... 
- 61. 旋转链表-leetcode
		给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数. 示例 1: 输入: 1->2->3->4->5->NULL, k = 2 输出: 4-& ... 
- LeetCode - 61、旋转链表
		给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数. 示例 1: 输入: 1->2->3->4->5->NULL, k = 2 输出: 4-& ... 
- leetcode 61. 旋转链表
		题目描述: 给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数. 示例 1: 输入: 1->2->3->4->5->NULL, k = 2 输 ... 
随机推荐
- Delphi代码规范
			1. 前言 本文档主要是为Delphi开发人员提供一个源代码书写标准,以及程序和文件的命名标准,使他们在编程时有一致格式可遵循.这样,每个编程人员编写的代码能够被其他人理解. 2. 源程序书写规范 2 ... 
- Django项目: 项目环境搭建   ----   一、创建django项目
			项目环境搭建 一.创建django项目 1.创建python虚拟环境 在虚拟机上创建python虚拟环境,因为实际项目部署,实在linux mkvirtualenv -p /usr/bin/pytho ... 
- Java程序员面试题收集(4)
			Java面试题和答案JAVA相关基础知识1.面向对象的特征有哪些方面 1.抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问题 ... 
- 关于 webpack的总结
			一 . 几个基本的概念 1. mode开发模式 // webpack.production.config.js module.exports = { mode: 'production' // 生产模 ... 
- js 高亮显示关键字
			示例: var defaultEmphasisHandler = function(keyword, data){ var regex = RegExp("("+keyword.r ... 
- 【html、CSS、javascript-8】JavaScript作用域
			JavaScript的作用域一直以来是前端开发中比较难以理解的知识点,对于JavaScript的作用域主要记住几句话 一.JavaScript中无块级作用域 在Java或C#中存在块级作用域,即:大括 ... 
- web前端学习(四)JavaScript学习笔记部分(6)-- js内置对象
			1.JS内置对象-什么是对象 1.1.什么是对象: JavaScript中的所有事物都是对象:字符串.数值.数组.函数 每个对象带有属性和方法 JavaScript允许自定义对象 1.2.自定义对象: ... 
- 状态压缩中常用的位运算(DP)
			面对位运算,一直很无感...可能数学太差,脑洞太小. 1.首先是最基本的: 与&,或|,非~,异或^. 2.获取一个或者多个固定位的值: 假设 x = 1010(二进制),我们要取左数第二位的 ... 
- css3 炫酷下拉菜单
			<!doctype html> <html> <head> <meta charset="UTF-8"> <title> ... 
- selenium(6):通过多种定位方式还是不能成功定位的原因
			场景:在成功修改密码后,会弹出一个修改成功的提示.通过id.xpath.class.css方式定位后,执行到这一步时候,就会出现错误. 原因:仔细检查了下代码,发现在提交修改的操作到修改成功的提示之间 ... 
