給出一個連結清單,每 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