当前位置: 首页 > news >正文

旋转链表问题(python3)

旋转链表

  • 问题描述
  • 解题思路
  • 代码实现

问题描述

给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。
在这里插入图片描述

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

  • 链表中节点的数目在范围 [0, 500] 内
  • -100 <= Node.val <= 100
  • 0 <= k <= 2 * 10^9

解题思路

直接考虑链表的分离与合并,从给定的移动位置出发,找出分割结点的位置,断开链表,最后将分割出来的另一个链表的尾结点连接到原链表的头结点,完成链表的旋转。

代码实现

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:def rotateRight(self, head: Optional[ListNode], k: int) -> Optional[ListNode]:if k == 0 or head is None:return headpre = head# 计算原链表长度numnum = 0while pre:num+=1pre = pre.next# 计算最终的移动距离# 如果移动距离大于长度,取余数if k>num:k = k%numprint(k)# 如果移动距离与长度一致,相对位置不变elif num == k:return headelse:k = k# 移动位置与长度成倍数时,相对位置也不变if k == 0:return head# 用于标记链表需要断开的结点位置flag = num - kcur_head = ListNode(-1)middle = headwhile middle:if flag == 1:# 记录断开的另一个链表头节点cur_head.next = middle.next# 将原链表断开位置指向空,表示该位置作为移动后的尾结点middle.next = Nonebreakmiddle = middle.nextflag -= 1# 记录新位置的headtemp = cur_head.nextwhile cur_head.next:cur_head = cur_head.next# 将断开后的另一个链表的尾部连接到原链表的头节点位置cur_head.next = headreturn temp

http://www.mrgr.cn/news/28213.html

相关文章:

  • 【Python模拟websocket登陆-拆包封包】
  • web——upload-labs——第五关——大小写绕过绕过
  • Cellebrite VS IOS18Rebooting
  • Flink1.19编译并Standalone模式本地运行
  • Leecode刷题C语言之最少翻转次数使二进制矩阵回文①
  • H.265流媒体播放器EasyPlayer.js H.264/H.265播放器chrome无法访问更私有的地址是什么原因
  • Leetcode—1184. 公交站间的距离【简单】
  • tcpdump
  • 图数据库的力量:深入理解与应用 Neo4j
  • 成功塑造孩子的人生,这一步很关键!
  • c语言 —— 结构变量
  • 详解HTTP/HTTPS协议
  • CAN FD协议详解
  • Redis常见应用场景
  • 【手撕】快排-分治
  • 【ESP32】ESP-IDF开发 | 中断矩阵+按键输入中断例程
  • 【23-24年】年度总结与迎新引荐
  • mtk7628 网口灯问题
  • 【数据结构】十大经典排序算法总结与分析
  • STM32—I2C
  • Andrej Karpathy谈AI未来:自动驾驶、Transformer与人机融合
  • 嵌入式Linux:向进程发送信号
  • 大模型笔记03--快速体验dify
  • dedecms靶场(四种webshell姿势)
  • 【Go】Go语言中的数组基本语法与应用实战
  • 建模杂谈系列256 规则函数化改造