Python 数据结构之旋转链表

发布时间 - 2026-01-10 23:16:32    点击率:

题目描述:给定一个链表,旋转链表,使得每个节点向右移动k个位置,其中k是一个非负数

样例:给出链表1->2->3->4->5->null和k=2;返回4->5->1->2->3->null

首先,观察一下这个题目要达到的目的,其实,换一种说法,可以这样来描述:给出一个k值,将链表从倒数第k个节点处起之后的部分移动到链表前面,就样例来说,其实是将4->5这一部分移动到整个链表前面,变成4->5->1->2->3->null。不过,需要注意的是,题中没有给出k的大小,当k比链表的长度还大的时候,我们就需要先用k对链表的长度求余,比如,如果k = 7,那么上面的例子还是将4->5移动到整个链表前面。

所以说,这个题的思路可以这样来总结:

1. 先求出整个链表的长度
2. 根据k值找到需要移动的部分链表的前驱(样例中的3)
3. 在前驱之后将链表断开,移动后半部分

代码如下:

# Definition for singly-linked list. 
# class ListNode: 
#   def __init__(self, x): 
#     self.val = x 
#     self.next = None 
 
class Solution: 
  # @param head: the list 
  # @param k: rotate to the right k places 
  # @return: the list after rotation 
  def rotateRight(self, head, k): 
    if head is None: 
      return head 
    cur = head 
    count = 1 
    # 计算链表长度 
    while cur.next: 
      cur = cur.next 
      count += 1 
    # 为节省代码量,这里是一个很有技巧的处理:用尾节点链接头结点 
    cur.next = head 
    # 此处,k为cur从尾节点到要断开部分的前驱需走的步数 
    k = count - k % count 
    # 找到前驱 
    while k != 0: 
      cur = cur.next 
      k -= 1 
    # 断开 
    head = cur.next 
    cur.next = None 
    # 因为首尾已经相连,所以直接返回前驱后面的那个节点即可,此处引用为head 
    return head 
    # write your code here 

需要注意的是21行首尾相连的技巧,这大大节省了我们的代码量,其实,就按之前思路中所描述的一步步来,也没问题。但是这个技巧确实很棒,值得学习。具体的细节我写在了代码注释里。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# Python  # 旋转链表  # 旋转链表详解  # 旋转链表实例代码  # python算法题 链表反转详解  # Python数据结构之翻转链表  # 单链表反转python实现代码示例  # Python二叉搜索树与双向链表转换实现方法  # Python实现链表反转的方法分析【迭代法与递归法】  # python实现反转部分单向链表  # Python3实现的反转单链表算法示例  # Python二叉搜索树与双向链表转换算法示例  # python如何实现单链表的反转  # python递归实现链表快速倒转  # 链表  # 的是  # 是一个  # 求出  # 样例  # 需要注意  # 首尾相连  # 这一  # 也没  # 很有  # 希望能  # 后将  # 谢谢大家  # 写在  # 先用  # 很棒  # 省了  # 还大  # 这大  # 换一种 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 开心动漫网站制作软件下载,十分开心动画为何停播?  如何用花生壳三步快速搭建专属网站?  Win10如何卸载预装Edge扩展_Win10卸载Edge扩展教程【方法】  公司网站制作价格怎么算,公司办个官网需要多少钱?  米侠浏览器网页背景异常怎么办 米侠显示修复  品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?  如何彻底卸载建站之星软件?  Laravel如何发送系统通知_Laravel Notifications实现多渠道消息通知  香港服务器网站卡顿?如何解决网络延迟与负载问题?  Python图片处理进阶教程_Pillow滤镜与图像增强  Laravel如何使用Service Provider注册服务_Laravel服务提供者配置与加载  Laravel的契約(Contracts)是什么_深入理解Laravel Contracts与依赖倒置  如何在沈阳梯子盘古建站优化SEO排名与功能模块?  青岛网站建设如何选择本地服务器?  html5如何设置样式_HTML5样式设置方法与CSS应用技巧【教程】  网页制作模板网站推荐,网页设计海报之类的素材哪里好?  JS实现鼠标移上去显示图片或微信二维码  Laravel如何获取当前登录用户信息_Laravel Auth门面使用与Session用户读取【技巧】  googleplay官方入口在哪里_Google Play官方商店快速入口指南  edge浏览器无法安装扩展 edge浏览器插件安装失败【解决方法】  Win11关机界面怎么改_Win11自定义关机画面设置【工具】  文字头像制作网站推荐软件,醒图能自动配文字吗?  微信小程序 input输入框控件详解及实例(多种示例)  Android Socket接口实现即时通讯实例代码  Laravel如何生成API文档?(Swagger/OpenAPI教程)  Laravel如何实现全文搜索功能?(Scout和Algolia示例)  php485函数参数是什么意思_php485各参数详细说明【介绍】  Laravel模型事件有哪些_Laravel Model Event生命周期详解  如何快速搭建高效WAP手机网站吸引移动用户?  佛山网站制作系统,佛山企业变更地址网上办理步骤?  制作公司内部网站有哪些,内网如何建网站?  Laravel怎么做缓存_Laravel Cache系统提升应用速度的策略与技巧  如何用AI帮你把自己的生活经历写成一个有趣的故事?  如何快速生成橙子建站落地页链接?  Win11应用商店下载慢怎么办 Win11更改DNS提速下载【修复】  PHP正则匹配日期和时间(时间戳转换)的实例代码  焦点电影公司作品,电影焦点结局是什么?  智能起名网站制作软件有哪些,制作logo的软件?  如何在云服务器上快速搭建个人网站?  Laravel Eloquent性能优化技巧_Laravel N+1查询问题解决  JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)  HTML5空格和nbsp有啥关系_nbsp的作用及使用场景【说明】  如何在阿里云高效完成企业建站全流程?  Python文件流缓冲机制_IO性能解析【教程】  高配服务器限时抢购:企业级配置与回收服务一站式优惠方案  Laravel如何与Inertia.js和Vue/React构建现代单页应用  Laravel怎么配置S3云存储驱动_Laravel集成阿里云OSS或AWS S3存储桶【教程】  Laravel安装步骤详细教程_Laravel环境搭建指南  Laravel策略(Policy)如何控制权限_Laravel Gates与Policies实现用户授权  如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?