2015-06-21 102 views
-2

我想創建一個類排序本身的添加和移除功能,這裏是我的代碼:排序的雙向鏈表

class SortedList(object): 
    def __init__(self): 
     self.head=None 
     self.tail=None 

    def add (self, add_obj): 
     newNode=DLLNode(add_obj) 
     current=self.head 
     if current==None: 
      self.head=self.tail=newNode 
     else: 
      while add_obj>current.data: 
       current=current.next_node 
      newNode.next_node=current 
      newNode.prev_node=current.prev_node 
      current.prev_node.next_node=newNode 
      current.prev_node=newNode 

    def remove (self, element): 
     current=self.head 
     while element != current.data: 
      current=current.next_node 
     current.next_node.prev_node=current.prev_node 
     current.prev_node.next_node=current.next_node 
     current=None 

我試圖逃跑,但失敗了。任何人都可以讓我知道爲什麼?

+0

什麼是失敗?任何錯誤?你得到了什麼?你應該嘗試把這些問題放在問題中,然後按'Post'按鈕,讓閱讀問題的人更容易幫助你 –

回答

0

看着你add功能的邏輯,我可以看到一些問題 -

  1. 一旦你添加了一個元素,那就是一旦你self.headself.tail不再 - None - ,你正在做的一個while循環來查找add_obj是否大於current.data。但是while循環寫錯了。讓我們假設,我們只在鏈表中添加了1個元素,並且我們試圖添加一個大於current,current的數據,將會變成current.next_node,這是當前的None,那麼你再次嘗試做同樣的檢查,這次你嘗試訪問dataNone對象的財產,導致Error。您的移除代碼存在類似的問題。

  2. 其次,在你的添加函數中,你只關心大於頭部,如果稍後添加一個小於所有其他元素的對象,你必須將它添加到self.head中,但是該案件沒有處理。

  3. 你沒有處理添加一個比當前列表中的所有其他元素都大的元素,在這種情況下,我認爲你打算讓self.tail元素的值最高,但是你沒有這樣做無論是。

+0

感謝您的幫助。現在我改變我的代碼爲這樣的添加功能,它是否照顧這些問題? –

0
def add (self, add_obj): 
     newNode=DLLNode(add_obj) 
     current=self.head 
     if current==None: 
      self.head=self.tail=newNode 
     else: 
      if add_obj<current.data: 
       self.head.prev_node=newNode 
       newNode.next_node=self.head 
       self.head=newNode 
       self.head.prev_node=None 
      else: 
       while add_obj>current.data: 
        current=current.next_node 
       if current != None: 
        newNode.next_node=current 
        newNode.prev_node=current.prev_node 
        current.prev_node.next_node=newNode 
        current.prev_node=newNode 
       else: 
        self.tail.next_node=newNode 
        newNode.prev_node=self.tail 
        self.tail=newNode 
        self.tail.next_node=None