当前位置: 首页 > 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]

http://www.lryc.cn/news/415814.html

相关文章:

  • 2-56 基于matlab的图像融合增强技术
  • 序列化定义以及使用和注意事项
  • 吴恩达机器学习COURSE1 WEEK3
  • 白骑士的PyCharm教学高级篇 3.1 性能分析与优化
  • swiper横向轮播(阶梯式滚动轮播)未生效
  • 基于arcpro3.0.2的北斗网格生成简介
  • 网络流算法:最大流问题
  • C++从入门到入土(四)--日期类的实现
  • 【香橙派系列教程】(七)香橙派下的Python3安装
  • 贝叶斯优化算法(Bo)与门控循环单元(GRU)结合的预测模型(Bo-GRU)及其Python和MATLAB实现
  • 人工智能时代,程序员当如何保持核心竞争力?
  • LMDrive 端到端闭环自动驾驶框架
  • P2045 方格取数加强版
  • 【Bigdata】OLAP的衡量标准
  • 关于DDOS攻击趋势及防护措施
  • Apache Flink:一个开源流处理框架
  • Nginx 学习笔记
  • 软甲测试定义和分类
  • Vue 3+Vite+Eectron从入门到实战系列之(二)一Elementplus及VueRouter的配置
  • STL-list
  • 2024 7.29~8.4 周报
  • 随身助手271个可用api接口网站php源码(随身助手API)
  • 珠江电缆,顺应全球变化,实现高质量出海
  • redis面试(四)持久化
  • 构建数据桥梁:Pandas如何简化API到DataFrame的转换
  • echarts制作grafana 面板之折线图
  • 技术男的审美反击:UI配置化新纪元
  • 73.结构体指针参数传递
  • 面向对象编程与Scala:掌握核心概念与应用
  • 《Advanced RAG》-07-探索 RAG 中表格数据的处理方案