1. # coding:utf-8
  2.  
  3. __author__ = "sn"
  4.  
  5. """
  6. 25. K 个一组翻转链表
  7. 给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。
  8. k 是一个正整数,它的值小于或等于链表的长度。
  9. 如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。
  10.  
  11. 示例 :
  12. 给定这个链表:1->2->3->4->5
  13. 当 k = 2 时,应当返回: 2->1->4->3->5
  14. 当 k = 3 时,应当返回: 3->2->1->4->5
  15.  
  16. 说明 :
  17. 你的算法只能使用常数的额外空间。
  18. 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
  19. """
  20.  
  21. """
  22. 思路:
  23.  
  24. """
  25.  
  26. class ListNode:
  27. def __init__(self, x):
  28. self.val = x
  29. self.next = None
  30.  
  31. class Solution(object):
  32. def reverseKGroup(self, head, k: int):
  33. """
  34. 每k个结点为一组进行翻转
  35. 在首部添加dummy后使用尾插法实现
  36. 边界处理方法为如果最后一次翻转的结点数量小于k,对该组结点再翻转一次
  37. 时间复杂度:O(N)+O(k)= O(N),遍历一次
  38. 空间复杂度:O(1)
  39. :param head:
  40. :param k:
  41. :return:
  42. """
  43. dummy = ListNode(0)
  44. dummy.next = head
  45.  
  46. p = dummy
  47.  
  48. while p and p.next:
  49. # k个为一组进行翻转
  50. pre, p = p, p.next
  51. n = k
  52. while n > 1 and p.next:
  53. q = p.next
  54. p.next, q.next = q.next, pre.next
  55. pre.next = q
  56. n -= 1
  57. # 尾部结点不足k个处理
  58. if n > 1:
  59. p = pre.next
  60. while p.next:
  61. q = p.next
  62. p.next, q.next = q.next, pre.next
  63. pre.next = q
  64. break
  65. return dummy.next
  66.  
  67. def test():
  68.  
  69. # 获取并执行Solution类中的解决方法
  70. so = Solution()
  71. func_list = [x for x in dir(so) if not x.startswith('__')]
  72. print('\r\n'*2, "方法列表:", func_list, '\r\n'*2)
  73.  
  74. # 生成链表
  75. from leet_code_list_pkg import LinkedList
  76. ll_class = LinkedList()
  77. linked_list = ll_class.make_linkedlist(list(range(1,10)))
  78. ll_class.print_linkedlist(linked_list)
  79.  
  80. # 设置参数
  81. #para = (linked_list, 3)
  82.  
  83. # 依次执行Solution类中的方法
  84. for i, _ in enumerate(func_list):
  85. # 设置参数
  86. linked_list = ll_class.make_linkedlist(list(range(1, 19)))
  87. para = (linked_list, 5)
  88. func = getattr(so, _)
  89. res = func(*para)
  90. # 打印方法说明文档
  91. print("*"*40, "\r\n方法[%s]:%s\r\n说明:%s"%(i, func.__name__, func.__doc__.replace(' ', '')), '\r\n执行结果:')
  92. # 打印执行结果
  93. ll_class.print_linkedlist(res)
  94. #func_print_list(res)
  95. #print(res)
  96. print('\r\n'*2)
  97.  
  98. if __name__ == "__main__":
  99. test()
  100. pass

leetcode 25. K 个一组翻转链表的更多相关文章

  1. Java实现 LeetCode 25 K个一组翻转链表

    25. K 个一组翻转链表 给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表. k 是一个正整数,它的值小于或等于链表的长度. 如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持 ...

  2. LeetCode 25. K 个一组翻转链表 | Python

    25. K 个一组翻转链表 题目来源:https://leetcode-cn.com/problems/reverse-nodes-in-k-group 题目 给你一个链表,每 k 个节点一组进行翻转 ...

  3. [LeetCode] 25. k个一组翻转链表

    题目链接: https://leetcode-cn.com/problems/reverse-nodes-in-k-group/ 题目描述: 给出一个链表,每 k 个节点一组进行翻转,并返回翻转后的链 ...

  4. LeetCode 25 —— K 个一组翻转链表

    1. 题目 2. 解答 首先,利用快慢指针确定链表的总结点数. 偶数个结点时,结点个数等于 i * 2. 奇数个结点时,结点个数等于 i * 2 + 1. 然后将链表的每 K 个结点划分为一组.循环对 ...

  5. [LeetCode] 25. K 个一组翻转链表 ☆☆☆☆☆(链表)

    https://leetcode-cn.com/problems/reverse-nodes-in-k-group/solution/javadi-gui-fang-fa-100-by-chadriy ...

  6. LeetCode 25. k个一组翻转链表(Reverse Nodes in k-Group)

    题目描述 给出一个链表,每 k 个节点一组进行翻转,并返回翻转后的链表. k 是一个正整数,它的值小于或等于链表的长度.如果节点总数不是 k 的整数倍,那么将最后剩余节点保持原有顺序. 示例 : 给定 ...

  7. leetcode 24. 两两交换链表中的节点 及 25. K 个一组翻转链表

    24. 两两交换链表中的节点 问题描述 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表. 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换. 示例: 给定 1->2-> ...

  8. [链表]LeetCode 25 K组一个翻转链表

    LeetCode 25 k组一个翻转链表 TITLE 示例 1: 输入:head = [1,2,3,4,5], k = 2 输出:[2,1,4,3,5] 示例 2: 输入:head = [1,2,3, ...

  9. Leetcode题库——25.k个一组翻转链表

    @author: ZZQ @software: PyCharm @file: ReverseList.py @time: 2018/11/6 15:13 题目要求:给出一个链表,每 k 个节点一组进行 ...

随机推荐

  1. Ubuntu 打不开终端 侧边栏消失的解决办法

    在网上找了很多办法,大多不行,具体原因也不太清楚,应该是Unity某些配置被改了. 我是在ubuntu14.04平台利用apt-get卸载python后,关机重启出现"打不开终端和侧边栏消失 ...

  2. [Python]pyhon去除txt文件重复行 python 2020.2.10

    代码如下: import shutil readPath='E:/word4.txt' #要处理的文件 writePath='E:/word5.txt' #要写入的文件 lines_seen=set( ...

  3. npm命令笔记-----转自网络,仅供自己查看使用

    npm是一个node包管理和分发工具,已经成为了非官方的发布node模块(包)的标准.有了npm,可以很快的找到特定服务要使用的包,进行下载.安装以及管理已经安装 的包. npm常用指令 1.npm ...

  4. "换行"和"回车"的来历

    \r: return 到当前行的最左边. \n: newline 向下移动一行,并不移动左右. Linux中\n表示:回车+换行: Windows中\r\n表示:回车+换行. Mac中\r表示:回车+ ...

  5. mybatis(五):源码分析 - 参数映射流程

  6. 巨杉学习笔记 | SequoiaDB MySQL导入导出工具使用实战

    本文来自社区用户投稿,感谢这位小伙伴的技术分享 巨杉数据库架构简介 巨杉数据库作为分布式数据库是计算和存储分离架构,由数据库实例层和存储引擎层组成的.存储引擎层负责数据库核心功能比如数据读写存储以及分 ...

  7. C#设置一个控件可以鼠标拖动

    C#设置一个控件可以鼠标拖动: 新建一个C#项目, 创建一个label控件, 设置label的鼠标按下和抬起事件分别为:label1_MouseDown和label1_MouseUp. 对代码进行如下 ...

  8. Mysql中判断是否存在

    不能像sqlserver一样用if not exists或者exists,应该这样: DECLARE p_count int; set p_count=0; select 1 into p_count ...

  9. SpringMVC框架应用

    SSMSpringMVC框架 1.    MVC设计模式:模型.视图.控制器: 视图:负责格式化数据并把他们呈现给用户,包括数据展示.用户交互.数据验证.界面设计等功能.对应组件:JSP或者HTML ...

  10. javasE--基础部分--线程

    Day23 本单元目标 一.线程的相关概念  二.线程的创建和启动★ 三.线程的停止 四.线程的常用方法 五.线程的生命周期★  六.线程的同步 七.线程的通信 八.线程的创建方式三 九.线程的创建方 ...