Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

linked_list.py的remove方法貌似有误 #29

Open
BigFishDreamWater opened this issue Sep 22, 2020 · 1 comment
Open

linked_list.py的remove方法貌似有误 #29

BigFishDreamWater opened this issue Sep 22, 2020 · 1 comment

Comments

@BigFishDreamWater
Copy link

在链表的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
Copy link

在链表的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

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants