4
要在鏈表中刪除一個節點,什麼是錯的這個實現?:刪除節點鏈表在python
def delete(self, val):
tmp = self.head
prev = None
while tmp:
if val == tmp.data:
self.size -= 1
if prev==None:
self.head = self.head.next
else:
prev.next = tmp.next
else:
prev = tmp
tmp = tmp.next
我已經看過了所有的導遊說,這應該是:
def delete(self, data):
tmp = self.head
prev = None
found = False
while tmp and not found:
if data == tmp.data:
found = True
else:
prev = tmp
tmp = tmp.next
if found:
self.size -= 1
if prev == None:
self.head = self.head.next
else:
prev.next = tmp.next
但我想不通爲什麼發現需要。爲什麼發現有必要?爲什麼這個實現更加正確?
此外,我也有同樣的煩惱與搜索:
我的實現是:
def __contains__(self, data):
tmp = self.head
while tmp:
if data == tmp.data:
return True
else:
tmp = tmp.next
return False
但正確的實現是:
def __contains__(self, data):
tmp = self.head
found = False
while tmp and not found:
if data == tmp.data:
found = True
else:
tmp = tmp.next
return found
嗯,你的刪除看起來不錯。它工作不正常嗎?從本質上講,你只是將代碼從if中刪除,並且如果條件是真的,那麼就放置它,這很好。另外,我認爲指南的實施,如果發現應該多一次標籤。發現錯誤 – FirebladeDan
找到用於退出某個節點的循環。 –
@CurlyJoe:哦,這很有意義。那麼**搜索**怎麼樣?爲了搜索,我也退出了 - 我確定我的實現更好,因爲它更簡潔,但我覺得我錯過了一些明顯的東西。 – polarbeargirl