leetcode 25. K 个一组翻转链表
- # coding:utf-8
- __author__ = "sn"
- """
- 25. K 个一组翻转链表
- 给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。
- k 是一个正整数,它的值小于或等于链表的长度。
- 如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。
- 示例 :
- 给定这个链表:1->2->3->4->5
- 当 k = 2 时,应当返回: 2->1->4->3->5
- 当 k = 3 时,应当返回: 3->2->1->4->5
- 说明 :
- 你的算法只能使用常数的额外空间。
- 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
- """
- """
- 思路:
- """
- class ListNode:
- def __init__(self, x):
- self.val = x
- self.next = None
- class Solution(object):
- def reverseKGroup(self, head, k: int):
- """
- 每k个结点为一组进行翻转
- 在首部添加dummy后使用尾插法实现
- 边界处理方法为如果最后一次翻转的结点数量小于k,对该组结点再翻转一次
- 时间复杂度:O(N)+O(k)= O(N),遍历一次
- 空间复杂度:O(1)
- :param head:
- :param k:
- :return:
- """
- dummy = ListNode(0)
- dummy.next = head
- p = dummy
- while p and p.next:
- # k个为一组进行翻转
- pre, p = p, p.next
- n = k
- while n > 1 and p.next:
- q = p.next
- p.next, q.next = q.next, pre.next
- pre.next = q
- n -= 1
- # 尾部结点不足k个处理
- if n > 1:
- p = pre.next
- while p.next:
- q = p.next
- p.next, q.next = q.next, pre.next
- pre.next = q
- break
- return dummy.next
- def test():
- # 获取并执行Solution类中的解决方法
- so = Solution()
- func_list = [x for x in dir(so) if not x.startswith('__')]
- print('\r\n'*2, "方法列表:", func_list, '\r\n'*2)
- # 生成链表
- from leet_code_list_pkg import LinkedList
- ll_class = LinkedList()
- linked_list = ll_class.make_linkedlist(list(range(1,10)))
- ll_class.print_linkedlist(linked_list)
- # 设置参数
- #para = (linked_list, 3)
- # 依次执行Solution类中的方法
- for i, _ in enumerate(func_list):
- # 设置参数
- linked_list = ll_class.make_linkedlist(list(range(1, 19)))
- para = (linked_list, 5)
- func = getattr(so, _)
- res = func(*para)
- # 打印方法说明文档
- print("*"*40, "\r\n方法[%s]:%s\r\n说明:%s"%(i, func.__name__, func.__doc__.replace(' ', '')), '\r\n执行结果:')
- # 打印执行结果
- ll_class.print_linkedlist(res)
- #func_print_list(res)
- #print(res)
- print('\r\n'*2)
- if __name__ == "__main__":
- test()
- pass
leetcode 25. K 个一组翻转链表的更多相关文章
- Java实现 LeetCode 25 K个一组翻转链表
25. K 个一组翻转链表 给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表. k 是一个正整数,它的值小于或等于链表的长度. 如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持 ...
- LeetCode 25. K 个一组翻转链表 | Python
25. K 个一组翻转链表 题目来源:https://leetcode-cn.com/problems/reverse-nodes-in-k-group 题目 给你一个链表,每 k 个节点一组进行翻转 ...
- [LeetCode] 25. k个一组翻转链表
题目链接: https://leetcode-cn.com/problems/reverse-nodes-in-k-group/ 题目描述: 给出一个链表,每 k 个节点一组进行翻转,并返回翻转后的链 ...
- LeetCode 25 —— K 个一组翻转链表
1. 题目 2. 解答 首先,利用快慢指针确定链表的总结点数. 偶数个结点时,结点个数等于 i * 2. 奇数个结点时,结点个数等于 i * 2 + 1. 然后将链表的每 K 个结点划分为一组.循环对 ...
- [LeetCode] 25. K 个一组翻转链表 ☆☆☆☆☆(链表)
https://leetcode-cn.com/problems/reverse-nodes-in-k-group/solution/javadi-gui-fang-fa-100-by-chadriy ...
- LeetCode 25. k个一组翻转链表(Reverse Nodes in k-Group)
题目描述 给出一个链表,每 k 个节点一组进行翻转,并返回翻转后的链表. k 是一个正整数,它的值小于或等于链表的长度.如果节点总数不是 k 的整数倍,那么将最后剩余节点保持原有顺序. 示例 : 给定 ...
- leetcode 24. 两两交换链表中的节点 及 25. K 个一组翻转链表
24. 两两交换链表中的节点 问题描述 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表. 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换. 示例: 给定 1->2-> ...
- [链表]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, ...
- Leetcode题库——25.k个一组翻转链表
@author: ZZQ @software: PyCharm @file: ReverseList.py @time: 2018/11/6 15:13 题目要求:给出一个链表,每 k 个节点一组进行 ...
随机推荐
- Ubuntu 打不开终端 侧边栏消失的解决办法
在网上找了很多办法,大多不行,具体原因也不太清楚,应该是Unity某些配置被改了. 我是在ubuntu14.04平台利用apt-get卸载python后,关机重启出现"打不开终端和侧边栏消失 ...
- [Python]pyhon去除txt文件重复行 python 2020.2.10
代码如下: import shutil readPath='E:/word4.txt' #要处理的文件 writePath='E:/word5.txt' #要写入的文件 lines_seen=set( ...
- npm命令笔记-----转自网络,仅供自己查看使用
npm是一个node包管理和分发工具,已经成为了非官方的发布node模块(包)的标准.有了npm,可以很快的找到特定服务要使用的包,进行下载.安装以及管理已经安装 的包. npm常用指令 1.npm ...
- "换行"和"回车"的来历
\r: return 到当前行的最左边. \n: newline 向下移动一行,并不移动左右. Linux中\n表示:回车+换行: Windows中\r\n表示:回车+换行. Mac中\r表示:回车+ ...
- mybatis(五):源码分析 - 参数映射流程
- 巨杉学习笔记 | SequoiaDB MySQL导入导出工具使用实战
本文来自社区用户投稿,感谢这位小伙伴的技术分享 巨杉数据库架构简介 巨杉数据库作为分布式数据库是计算和存储分离架构,由数据库实例层和存储引擎层组成的.存储引擎层负责数据库核心功能比如数据读写存储以及分 ...
- C#设置一个控件可以鼠标拖动
C#设置一个控件可以鼠标拖动: 新建一个C#项目, 创建一个label控件, 设置label的鼠标按下和抬起事件分别为:label1_MouseDown和label1_MouseUp. 对代码进行如下 ...
- Mysql中判断是否存在
不能像sqlserver一样用if not exists或者exists,应该这样: DECLARE p_count int; set p_count=0; select 1 into p_count ...
- SpringMVC框架应用
SSMSpringMVC框架 1. MVC设计模式:模型.视图.控制器: 视图:负责格式化数据并把他们呈现给用户,包括数据展示.用户交互.数据验证.界面设计等功能.对应组件:JSP或者HTML ...
- javasE--基础部分--线程
Day23 本单元目标 一.线程的相关概念 二.线程的创建和启动★ 三.线程的停止 四.线程的常用方法 五.线程的生命周期★ 六.线程的同步 七.线程的通信 八.线程的创建方式三 九.线程的创建方 ...