2013-05-28 82 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