题目:25. K 个一组翻转链表
给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。
k 是一个正整数,它的值小于或等于链表的长度。
如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-nodes-in-k-group
解题思路
见代码注释与反转链表之递归操作链表
代码
# Definition for singly-linked list.
class ListNode(object):
def __init__(self, x):
self.val = x
self.next = None
class Solution(object):
def reverse(self, head, b):
'''迭代反转b节点之前的链表,操作区间即[head,b),b=None时,反转整个链表,并返回新链表的第一个节点'''
pre = None
cur = head
while cur != b:
nxt = cur.next
cur.next = pre
pre = cur
cur = nxt
return pre
def reverseKGroup(self, head, k):
"""
反转以head为第一个节点的链表 的前k个节点
并返回新链表的第一个节点
"""
b = head
t = k
while t > 0:
if b == None: return head # 如果节点总数不是 k 的整数倍,将最后剩余的节点保持原有顺序。
b = b.next
t -= 1
last = self.reverse(head, b)
head.next = self.reverseKGroup(b, k)
return last
# def print_list(head):
# res = []
# while head != None:
# res.append(head.val)
# head = head.next
# print(res)
#
#
# s = Solution()
# node1 = ListNode(1)
# node2 = ListNode(2)
# node3 = ListNode(3)
# node4 = ListNode(4)
# node5 = ListNode(5)
# node1.next = node2
# node2.next = node3
# node3.next = node4
# node4.next = node5
# node5.next = None
# print_list(node1)
# print_list(s.reverseKGroup(node1, 3))