2014-04-05 124 views
-1
def remove(lst,value): 
    curr = lst.head 
    while not isinstance(curr, EmptyNode): 
     if curr.data == value: 
      curr.data=curr.nxt.data 
      curr.nxt =curr.data.nxt 
      lst.size -= 1 
      return lst 
     curr = curr.nxt 
     return True 
    return False 

該函數應該刪除給定的值,並返回一個布爾值(True)。例如,如果我輸入:Python鏈接列表,刪除函數iter

remove(lstA, 'b') 

它應該返回True,但是當我運行我的程序,它給我這個錯誤消息:

 curr.nxt =curr.data.nxt 
AttributeError: 'str' object has no attribute 'nxt' 

任何一個小提示,將不勝感激

回答

0

您收到錯誤的原因是因爲(鏈接列表的)節點的數據成員,即curr.data是一個字符串。對字符串做.nxt未定義。你應該做的是,一個節點對象上的.nxt

還有其他問題與您的代碼太:

  • 你說,如果一個值在列表中找到,應該將其刪除並返回true。但是在你的代碼中,在if curr.data == value:之內有一個返回語句,這意味着如果找到要刪除的值,該方法將返回該列表而不是True,正如您期望的那樣。

  • 此外,看着你的代碼,如果它沒有找到在當前節點被移除的值,它會遞增curr到下一個節點,並返回True

  • 不能刪除一個節點從當前位於該節點的鏈接列表中(這似乎是您的代碼中的情況)。只有當您擁有一個保存前一個節點的變量時,纔可以這樣做。由於在你的代碼中,你不保存前一個節點,你應該看看curr.next.data。換句話說,你應該檢查if curr.next.data == value:。你需要相應地處理邊界條件。

+0

以及我嘗試你說的是否cure.next.data ==值:,似乎是工作是什麼,但它不是<在0x30e3930 __ __爲主。MYLIST對象>輸出布爾值,它被輸出。 – user3408174

+0

'<__main __。0x30e3930的MyList對象>'意味着正在執行'if'塊中的'return lst'。檢查我的觀點1,爲什麼你的代碼不會返回'True' – shaktimaan

+0

ohh,我看到所以只需將lst更改爲True即可,但如果我想從列表中刪除一個元素,那麼該元素不存在?它應該返回False,但對於我的代碼,它不會返回任何內容 – user3408174