天天看點

Leetcode做題日記:25. k個一組翻轉連結清單(PYTHON)

給出一個連結清單,每 k 個節點一組進行翻轉,并傳回翻轉後的連結清單。

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

示例 :

給定這個連結清單:1->2->3->4->5

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

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

說明 :

你的算法隻能使用常數的額外空間。

你不能隻是單純的改變節點内部的值,而是需要實際的進行節點交換。

#第一次的代碼,暴力解決,把k個連結清單裡的數,翻轉加入list,當連結清單不足k個,直接儲存到

#list中,不翻轉,然後,把這個含有正确順序的list重新制成ListNode

#隻擊敗18.9%

#hhh的作用就是判斷是否滿足剩下的連結清單有k個數

LL=ListNode(0)
        LL.next=head
        lis=[]
        Lis=[]
        L1=ListNode(0)
        L2=L1
        hhh=0
        while hhh!=1:  #while True:  也行
            for i in range(k):#表示每次找k個出來做翻轉,如果還沒執行完畢就到頭,也就是如果不滿k個了,那麼就不翻轉
                bb=LL.next
                LL=LL.next #更新LL為下一個節點,有可能為None
                if bb!=None:
                    lis.append(bb.val)
                else :   #沒滿k個但是到頭了
                    hhh=1
                    break

            if hhh!=1: #即這K個翻轉      
                liss=lis[::-1]
                Lis=Lis+liss
            else : #沒滿的就不翻轉
                liss=lis[::1]
                Lis=Lis+liss
            lis=[]
        for i in Lis:
            bb=ListNode(i)
            L1.next=bb
            L1=L1.next
        return  L2.next