# 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 个一组翻转链表的更多相关文章

  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. (转)Android访问webservice

    纠正网上乱传的android调用Webservice方法.   1.写作背景: 笔者想实现android调用webservice,可是网上全是不管对与错乱转载的文章,结果不但不能解决问题,只会让人心烦 ...

  2. weflow的坑

    开发工具weflow的坑 使用less,css预处理器.如果less文件有问题项目不能正常打开需要排除错误后才能正常打开.今天遇到个问题background:rgba(255,255,255 .35) ...

  3. 常用sql 2018.08.31

    concat()函数 concat(str1, str2,...)功能:将多个字符串连接成一个字符串 返回结果为连接参数产生的字符串,如果有任何一个参数为null,则返回值为null. 如:CONCA ...

  4. Server2012多用户远程桌面及问题解决记录

    1.开启远程桌面 转载自  https://jingyan.baidu.com/article/c275f6ba9321fda33c756712.html 2.添加用户 转载自 https://jin ...

  5. hive删除表时直接卡死

    原因:因为以前安装的mysql,字符集都改为了utf-8. 解决方案:需要把字符集都改为latin1 首先进入mysql查看字符集 show variables like 'char%' 找到mysq ...

  6. Linux - mysql 异常:登录不上mysql数据库

    问题描述 重启虚拟机之后,用命令 mysql -u root -p 登录不上 mysql 数据库,页面显示: 但是,用命令 service mysqld status 可以查看状态 解决方案 1.查看 ...

  7. 添加Usb3.0驱动到win7/8/10的usb安装光盘

    文章中所有需要使用到的软件和资源在文章末尾的网盘连接中有下载 Run the DISM GUI Tool Right-click on DISM GUI.exe and select Run as A ...

  8. C# asp.net 连接Mysql 数据库

    首先添加 引用: using System.Data;using MySql.Data.MySqlClient; 代码: 这里只写了 后台代码 Mysql 连接和sql 连接代码几乎一样 只要把 My ...

  9. HandlerMethod解析

    api写HandlerMethod的作用: Encapsulates information about a handler method consisting of a method and a b ...

  10. Eclipse项目转到MyEclipse中出错

    原因如下. JDK的编译版本和JRE的运行版本不一致导致了这个问题. 在MyEclipse中,对项目进行Build path 逐一设置即可. 还有关于类型转换的问题,由于JDK版本的不一致,下载下来的 ...