題目來源:https://leetcode-cn.com/problems/reverse-nodes-in-k-groupnode
給你一個鏈表,每 k 個節點一組進行翻轉,請你返回翻轉後的鏈表。python
k 是一個正整數,它的值小於或等於鏈表的長度。算法
若是節點總數不是 k 的整數倍,那麼請將最後剩餘的節點保持原有順序。spa
示例:指針
給你這個鏈表:1->2->3->4->5code
當 k = 2 時,應當返回: 2->1->4->3->5blog
當 k = 3 時,應當返回: 3->2->1->4->5leetcode
說明:get
思路:迭代、翻轉鏈表it
具體思路:
具體的代碼實現以下。
# Definition for singly-linked list. # class ListNode: # def __init__(self, x): # self.val = x # self.next = None class Solution: def reverseKGroup(self, head: ListNode, k: int) -> ListNode: if head == None and head.next == None and k < 2: return head # 定義哨兵節點 dummy = ListNode(0) # 指向節點 dummy.next = head # 定義前驅後繼節點 pre = dummy tail = dummy # 控制 tail 到待翻轉鏈表部分的末尾 while True: count = k while count > 0 and tail != None: count -= 1 tail = tail.next # 到達尾部時,長度不足 k 時,跳出循環 if tail == None: break # 這裏用於下次循環 head = pre.next # 開始進行翻轉 while pre.next != tail: tmp = pre.next pre.next = tmp.next tmp.next = tail.next tail.next = tmp # 重置指針 pre = head tail = head return dummy.next
以上就是使用迭代,根據題目提供的 k 值肯定翻轉鏈表部分,在內部實現翻轉,進而解決《25. K 個一組翻轉鏈表》的主要內容。其中注意要定義鏈表的前驅和後繼,防止指向錯誤。