簡體   English   中英

升序添加節點

[英]Add a node in ascending order

def add(self, value):
    #write your code here

    if self.head == None:
        new_node = Node(value)
        self.head = new_node
        self.tail = self.head


    elif self.head.value > new_node.value:
        new_node = Node(value)
        new_node.value = value
        new_node.next = self.head
        self.head = new_node

    else:
        new_node = Node(value)
        self.tail.setNext(new_node)
        self.tail = new_node

    self.count += 1

上面是我的函數添加的代碼。 我試圖將Node對象按升序添加到鏈接列表中,以便在打印時它顯示為:

>>> x.add(8)
>>> x.add(7)
>>> x.add(3)
>>> x.add(-6)
>>> x.add(58)
>>> x.add(33)
>>> x.add(1)
>>> x.add(-88)
>>> print(x)
Head:Node(-88) Tail:Node(58)
List:-88 -6 1 3 7 8 33 58

但是,當我在上面的代碼中執行此操作時,它會將其打印為:

>>> print(x)
Head:Node(-88)
Tail:Node(1)
List:-88 -6 3 7 8 58 33 1

我80%確信問題出在elif語句內,但我不確定如何解決此問題以使其升序。

問題出在最后。 讓我們看看發生了什么:數字,動作,結果:

  • 8->如果是第一個-> 8
  • 7-> elif 8> 7-> 7,8
  • 3,-6->省略號相同-> -6,3,7,8
  • 58->最后---6、3、7、8、58

    當33到來並再次進入最后一個錯誤時,這里出現錯誤,因為它比-6的head大,結果變為-6、3、7、8、58、33。

要解決此問題,您需要遍歷列表以查看需要放置33的位置,僅通過將項目放在開頭或末尾就無法獲得排序列表。

def add(self, value):
    #write your code here

    #if list is empty
    if self.head == None:
        new_node = Node(value)
        self.head = new_node
        self.tail = self.head

    #elif value < head set new head
    elif self.head.value > value:
        new_node = Node(value)
        new_node.value = value
        new_node.next = self.head
        self.head = new_node


    #elif value > tail set new tail
    elif value > self.tail.value:
      new_node = Node(value)
      self.tail.setNext(new_node)
      self.tail = new_node
    # and finally you need to loop to find the sweet spot
    else:
      # we will start the search from the head
      current_node = self.head
      # while the value we wish to insert is bigger than the next one
      while value > current_node.next.value:
        # set the current one to the next one
        current_node = current_node.next
      # finally we reached a node which is smaller than the value we wish to insert
      # but its next node is bigger
      new_node = Node(value)
      # set the new nodes next to the bigger node
      new_node.next = current_node.next
      # and the curren't node's next to the new one
      current_node.next = new_node

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM