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

K个一组翻转链表(LeetCode)

题目

给你链表的头节点 head ,每 k 个节点一组进行翻转,请你返回修改后的链表。

k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。

你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。

解题

class ListNode:def __init__(self, val=0, next=None):self.val = valself.next = nextdef reverseKGroup(head, k):"""翻转链表中每 k 个节点一组的节点。:param head: 链表的头节点:param k: 每组翻转的节点数量:return: 翻转后的链表头节点"""def getKthNode(current, k):"""获取链表中第 k 个节点。:param current: 当前节点:param k: 节点数量:return: 第 k 个节点或 None(如果不足 k 个节点)"""while current and k > 1:current = current.nextk -= 1return currentdef reverseLinkedList(head, k):"""翻转链表的一部分。:param head: 部分链表的头节点:param k: 节点数量:return: 翻转后的链表头节点"""previous, current = None, headwhile k:next_node = current.nextcurrent.next = previousprevious = currentcurrent = next_nodek -= 1return previous# 找到第 k 个节点kth_node = getKthNode(head, k)if not kth_node:return headnext_group_head = kth_node.nextkth_node.next = None# 翻转当前 k 个节点new_head = reverseLinkedList(head, k)# 递归处理剩余链表,并连接head.next = reverseKGroup(next_group_head, k)return new_headdef listToListNode(arr):"""将 Python 列表转换为链表。:param arr: Python 列表:return: 链表的头节点"""dummy = ListNode()current = dummyfor val in arr:current.next = ListNode(val)current = current.nextreturn dummy.nextdef listNodeToList(head):"""将链表转换为 Python 列表。:param head: 链表的头节点:return: Python 列表"""result = []while head:result.append(head.val)head = head.nextreturn resultdef testReverseKGroup():"""测试 reverseKGroup 函数。"""test_cases = [([1, 2, 3, 4, 5], 2),([1, 2, 3, 4, 5], 3),([1, 2, 3, 4, 5], 1),([1], 1),([1, 2], 2)]for i, (input_list, k) in enumerate(test_cases):head = listToListNode(input_list)new_head = reverseKGroup(head, k)output_list = listNodeToList(new_head)print(output_list)# 运行测试代码
testReverseKGroup()

 [2, 1, 4, 3, 5]
[3, 2, 1, 4, 5]
[1, 2, 3, 4, 5]
[1]
[2, 1]

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 七天打造一套量化交易系统:Day8-阶段性总结、未完待续...
  • 为什么concurrenthashmap的segment要设计成可重入锁?
  • Linux源码阅读笔记13-进程通信组件中
  • 大厂linux面试题攻略五之数据库管理
  • delphi 12 学习如何登陆网站下载文件
  • 消息队列:Kafka吞吐量为什么比RocketMQ大
  • 3.特征工程-特征抽取、特征预处理、特征降维
  • 第一阶段面试问题(后半部分)
  • java之IO篇——File、字节流、字符流
  • 【IO】使用有名管道实现,一个进程用于给另一个进程发消息,另一个进程收到消息后,展示到终端上,并且将消息保存到文件上一份
  • 新书速览|AI创意商业广告设计:Adobe Firefly + Photoshop
  • 现代前端架构介绍(第一部分):App是如何由不同的构建块构成的
  • 数据中台建设之数据汇聚与数据交换
  • Apache Pig: 高级数据处理平台
  • 【开源】嵌入式Linux(IMX6U)应用层综合项目(1)--云平台调试APP
  • [译]CSS 居中(Center)方法大合集
  • 4月23日世界读书日 网络营销论坛推荐《正在爆发的营销革命》
  • Android开源项目规范总结
  • Angular2开发踩坑系列-生产环境编译
  • AzureCon上微软宣布了哪些容器相关的重磅消息
  • Fastjson的基本使用方法大全
  • Hibernate最全面试题
  • Java Agent 学习笔记
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • Linux下的乱码问题
  • Markdown 语法简单说明
  • mysql 数据库四种事务隔离级别
  • Nodejs和JavaWeb协助开发
  • node和express搭建代理服务器(源码)
  • SAP云平台运行环境Cloud Foundry和Neo的区别
  • vue2.0一起在懵逼的海洋里越陷越深(四)
  • 半理解系列--Promise的进化史
  • 翻译--Thinking in React
  • 开源SQL-on-Hadoop系统一览
  • 两列自适应布局方案整理
  • 思否第一天
  • 我有几个粽子,和一个故事
  • 用quicker-worker.js轻松跑一个大数据遍历
  • 原生 js 实现移动端 Touch 滑动反弹
  • - 转 Ext2.0 form使用实例
  • 【运维趟坑回忆录 开篇】初入初创, 一脸懵
  • 3月27日云栖精选夜读 | 从 “城市大脑”实践,瞭望未来城市源起 ...
  • TPG领衔财团投资轻奢珠宝品牌APM Monaco
  • #vue3 实现前端下载excel文件模板功能
  • #我与Java虚拟机的故事#连载11: JVM学习之路
  • $.each()与$(selector).each()
  • (1)bark-ml
  • (2015)JS ES6 必知的十个 特性
  • (C语言)求出1,2,5三个数不同个数组合为100的组合个数
  • (day6) 319. 灯泡开关
  • (Repost) Getting Genode with TrustZone on the i.MX
  • (TipsTricks)用客户端模板精简JavaScript代码
  • (分布式缓存)Redis持久化
  • (附源码)ssm基于jsp高校选课系统 毕业设计 291627
  • (附源码)基于SpringBoot和Vue的厨到家服务平台的设计与实现 毕业设计 063133