每k個一組反轉鏈表-python版

題目:傳送門

給出一個鏈表,每 k 個節點一組進行翻轉,並返回翻轉後的鏈表。k 是一個正整數,它的值小於或等於鏈表的長度。如果節點總數不是 k 的整數倍,那麼將最後剩餘節點保持原有順序。

說明:

  1. 你需要自行定義鏈表結構,將輸入的數據保存到你的鏈表中;
  2. 你不能只是單純的改變節點內部的值,而是需要實際的進行節點交換;
  3. 你的算法只能使用常數的額外空間。
    輸入描述:
    第一行輸入是鏈表的值
    第二行輸入是K的值,K是大於或等於1的整數

輸入形式爲:
1 2 3 4 5
2
輸出描述:
當 k = 2 時,應當輸出:
2 1 4 3 5

當 k = 3 時,應當輸出:
3 2 1 4 5

當k=6時,應當輸出:
1 2 3 4 5
示例1
輸入
1 2 3 4 5
2
輸出
2 1 4 3 5

代碼

class ListNode:
    def  __init__(self,x):
        self.val = x
        self.next = None

class Main:
    def const(self,arr):
        curr = ans = ListNode(-1)
        for x in arr:
            curr.next = ListNode(x)
            curr = curr.next
        return ans.next

    def reverse(self,listnode,n):
        ans = curr = ListNode(-1)
        while listnode:
            t = n
            arr = []
            while t >= 1 and listnode:
                arr.append(listnode.val)
                t -= 1
                listnode = listnode.next
            if t == 0:
                curr.next = self.const(reversed(arr))
            else:
                curr.next = self.const(arr)#如果最後一組不夠n個,不需要反轉
                
            tt = n #指針後移n位
            while tt >= 1:
                curr = curr.next
                tt -= 1
        ans = ans.next
        while ans:
            print(ans.val,end=' ')
            ans = ans.next

if __name__ == '__main__':
    arr = input()
    n = input()
    ln = Main().const(arr.split(' '))
    Main().reverse(ln, int(n))

注意事項

  1. python讀取控制檯輸入:arr = input()獲取一行
  2. python不換行輸出:print(xxx,end=’ ')
  3. 其他的看代碼註釋
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章