1. 程式人生 > >LeetCode25. K個一組翻轉連結串列 python3

LeetCode25. K個一組翻轉連結串列 python3

給出一個連結串列,每 k 個節點一組進行翻轉,並返回翻轉後的連結串列。

k 是一個正整數,它的值小於或等於連結串列的長度。如果節點總數不是 k 的整數倍,那麼將最後剩餘節點保持原有順序。

示例 :

給定這個連結串列:1->2->3->4->5

當 k = 2 時,應當返回: 2->1->4->3->5

當 k = 3 時,應當返回: 3->2->1->4->5

說明 :

你的演算法只能使用常數的額外空間。 你不能只是單純的改變節點內部的值,而是需要實際的進行節點交換。

雙指標,超時小程式!!!(僅作為思路參考)

class Solution:
    def reverseKGroup(self, head, k):
        """
        :type head: ListNode
        :type k: int
        :rtype: ListNode
        """
        k1 = self.length(head)//k
        new_head = ListNode(0)
        new_head.next = head
        pre = new_head
        for i in range(k1):
            first = pre.next
            last = pre.next
            while k-1:
                if last.next != None:
                    last = last.next
                    k -= 1
                else:
                    break
            later = last.next
            if last != None and last.next != None:
                first.next = later
                last.next = first
                pre.next = last
                pre = last

        return new_head.next

    def length(self, head):
        cur = head
        count = 0
        while cur:
            cur = cur.next
            count += 1
        return count