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.value它再次指向自身,并且列表中存在相同的值!谁能帮我吗!提前谢谢!:)

4

1 回答 1

2

这里最简单的解决方案是在空列表的情况下有一个指向自身的虚拟节点。结果,在一个空列表中,我们有一个节点指向它自己(虚拟对象),在一个包含一个元素的列表中,虚拟对象指向元素,元素指向虚拟对象。

避免了任何特殊情况的需要,并且通常简化了代码。要检查列表是否为空,您可以这样做dummy.next is dummy,也很好。

于 2013-05-28T16:34:31.397 回答