python_data_structures_and_algorithms icon indicating copy to clipboard operation
python_data_structures_and_algorithms copied to clipboard

linked_list.py的remove方法貌似有误

Open BigFishDreamWater opened this issue 4 years ago • 1 comments

在链表的remove方法中 这行代码实现,经过测试貌似是有问题的。 def remove(self, value): # O(n) """ 删除包含值的一个节点,将其前一个节点的 next 指向被查询节点的下一个即可 ............. if curnode is self.tailnode: # NOTE: 注意更新 tailnode if prevnode is self.root: self.tailnode = None else: self.tailnode = prevnode del curnode

按照源代码意义,这行代码实际上是将被删除结点之后的结点都给删除了,而并非方法实现的删除单个结点。 实际测试也是如此。 比如生成链表0-->1-->2-->3-->4--->5 删除3结点 按照源代码 结果是 0-->1--->2 我这边的修改的代码是: if prevode is self.root: self.tailnode = None if curnode == self.tailnode: self.tailnode = prevode del curnode

如果是我弄错了,还请告知解惑。

BigFishDreamWater avatar Sep 22 '20 02:09 BigFishDreamWater

在链表的remove方法中 这行代码实现,经过测试貌似是有问题的。 def remove(self, value): # O(n) """ 删除包含值的一个节点,将其前一个节点的 next 指向被查询节点的下一个即可 .............

if curnode is self.tailnode: # NOTE: 注意更新 
     tailnode 
if prevnode is self.root: 
     self.tailnode = None 
else: 
     self.tailnode = prevnode 
del curnode

按照源代码意义,这行代码实际上是将被删除结点之后的结点都给删除了,而并非方法实现的删除单个结点。 实际测试也是如此。 比如生成链表0-->1-->2-->3-->4--->5 删除3结点 按照源代码 结果是 0-->1--->2 我这边的修改的代码是:

if prevode is self.root: 
    self.tailnode = None 
if curnode == self.tailnode: 
    self.tailnode = prevode 
del curnode

如果是我弄错了,还请告知解惑。

fish1968 avatar Jan 28 '23 15:01 fish1968