亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何返回鏈表的中間節點

如何返回鏈表的中間節點

蝴蝶不菲 2022-01-11 15:48:06
在檢查鏈表的中間節點時,我對鏈表中的 while 循環條件如何工作感到困惑這是我找到鏈表中間節點的正確代碼class Node(object):    def __init__(self, data):        self.data = data        self.next = Noneclass linkedList(object):    def __init__(self):        self.head = None    def append(self, data):        node = Node(data)        if self.head == None:            self.head = node        temp = self.head        while temp.next:            temp = temp.next        temp.next = node    def middle(self):        first = self.head        second = self.head        while second and second.next:            second = second.next.next            first = first.next        print(first.data)如果我將 while 循環更改為while second:或者while second.next:我收到一條錯誤消息AttributeError: 'NoneType' object has no attribute 'next' on line 24我只是想知道為什么它是重要的是有兩個second和second.next
查看完整描述

2 回答

?
UYOU

TA貢獻1878條經驗 獲得超4個贊

對于初學者,您的 append 方法不起作用,并且會陷入無限的 while 循環,因為您在添加第一個元素時不會退出 append。正確的版本是


def append(self, data):

    node = Node(data)

    if self.head == None:

        self.head = node

        return

    else:

        temp = self.head

        while temp.next:

            temp = temp.next

        temp.next = node

至于您的另一個問題,我們希望找到偶數和奇數列表的循環中間,second.next覆蓋奇數列表情況和second覆蓋偶數列表情況,因為第二個指針將指向空值,或者它將本身為 null ,如果你只使用其中一個,你會得到你描述的錯誤,因此你需要在 while 循環中同時擁有這兩個條件


查看完整回答
反對 回復 2022-01-11
?
斯蒂芬大帝

TA貢獻1827條經驗 獲得超8個贊

該解決方案通過使用兩個指針來工作。第一個每次走 1 步,第二步一次走 2 步。但是,在采取 2 個步驟時,需要驗證兩件事:

  1. 有一個有效的下一步

  2. 在上面提到的下一步之后有一個步驟

如果您跳過一個檢查,它將進入循環,但在邊界條件下它找不到下一個。舉例說明:如果有 4 個節點并且您只second.next在第 3 個節點處檢查,那么您將擁有second.next有效并且您將進入while循環但在其中您可以直接訪問second.next.next

F,S | 1 --> 2 --> 3 --> 4 --> 無


查看完整回答
反對 回復 2022-01-11
  • 2 回答
  • 0 關注
  • 213 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號