題目: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))