日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

将单链表的每K个节点之间逆序

發布時間:2025/4/5 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 将单链表的每K个节点之间逆序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目:

  給定一個單鏈表的頭節點head,實現一個調整單鏈表的函數,使得每K個節點之間逆序,如果最后不夠K個節點,則不調整最后的節點。

基本思路:

  方法一。時間復雜度O(N),空間復雜度O(K)。?
  ?
  利用棧結構,依次遍歷鏈表,將節點壓入棧中,棧中節點每湊到k個就將這k個節點進行逆序,然后再連接入鏈表中。需要注意頭節點的更新以及每組節點兩頭的連接。代碼實現如下:

class node:def __init__(self,value):self.value = valueself.next = Nonedef reverseKNode(head,k):if k < 2:return headstack = []newHead,cur,pre,next_ = head,head,None,Nonewhile cur!=None:next_ = cur.nextstack.append(cur)if len(stack)==k:pre = reverse(stack,pre,next_)if newHead == head:newHead = curelse:newHead = newHeadcur = next_return newHeaddef reverse(stack,left,right):cur = stack.pop()if left!=None:left.next = curwhile stack:next_ = stack.pop()cur.next = next_cur = next_cur.next = rightreturn cur

方法二。時間復雜度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个节点之间逆序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。