【发布时间】:2015-11-14 11:28:15
【问题描述】:
要删除链表中的一个节点,这个实现有什么问题?:
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 中删除代码并将其放入 if 条件为 true 即可。另外,我认为如果找到指南实施,应该再标记一次。看起来不对
-
found 用于在某个节点退出循环。
-
@CurlyJoe:哦,这很有意义。但是 search 呢?对于搜索,我也退出了——我确信我的实现更好,因为它更简洁,但我觉得我错过了一些明显的东西。
标签: python search linked-list