2013-05-28 108 views
1
def delete_node(head, value): 
    p=head 
    if p is None: 
     return None 
    while p.value!=value: 
     p=p.next 
     if p.next is head and p.value!=value: 
      return head 
    p.value=p.next.value 
    if p.next==head: 
     head=p 
    p.next=p.next.next 
    return head 

上面是我的代码,用于根据节点的值删除一个循环链表中的节点! 该代码不会给我这种情况的结果 - 我只有1个元素在列表中,我删除了它。所以结果应该是一个空集。但是因为我把p.value = p.next 。值它再次指向自身,并且列表中的值相同!谁能帮我吗!感谢提前! :)Python中的循环链表

回答

2

这里最简单的解决方案是在虚列列表的情况下有一个指向自身的虚拟节点。因此,在一个空列表中,我们有一个指向自身的节点(虚拟),在一个列表中有一个元素指向元素的虚拟点,元素指向虚拟列表。

避免任何特殊情况的需要,并通常简化代码。要检查列表是否为空,您可以只执行dummy.next is dummy,也不错。

+0

Ty ..只要放一个if循环!适用于所有情况! :) – user2205015