将单链表的每K个节点之间逆序
生活随笔
收集整理的這篇文章主要介紹了
将单链表的每K个节点之间逆序
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目:
給定一個單鏈表的頭節點head,實現一個調整單鏈表的函數,使得每K個節點之間逆序,如果最后不夠K個節點,則不調整最后的節點。
基本思路:
方法一。時間復雜度O(N),空間復雜度O(K)。?
?
利用棧結構,依次遍歷鏈表,將節點壓入棧中,棧中節點每湊到k個就將這k個節點進行逆序,然后再連接入鏈表中。需要注意頭節點的更新以及每組節點兩頭的連接。代碼實現如下:
方法二。時間復雜度O(N),空間復雜度O(1)。
不需要利用棧,用變量記錄每一組開始的第一個節點和最后一個節點,然后直接逆序調整,把這一組的節點都逆序。需要注意頭節點的更新以及每組節點兩頭的連接。代碼實現如下:
def reverseKnode2(head,k):if k < 2:return headcur,start,pre,next_ = head,None,None,Nonecount = 1while cur!=None:next_ = cur.nextif count == k:if pre == None:start = headelse:start = pre.nextif pre == None:head = curelse:head = headreverse(pre,start,cur,next_)pre = startcount = 0count +=1cur = next_return headdef reverse(left,start,end,right):pre = startcur = start.nextnext_ = Nonewhile cur!=right:next_ = cur.nextcur.next = prepre = curcur = next_if left!=None:left.next = endstart.next = right?
總結
以上是生活随笔為你收集整理的将单链表的每K个节点之间逆序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 两个单链表生成相加链表
- 下一篇: 删除无序单链表中值重复出现的节点