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

Приведенный выше мой код для удаления узла в круговом связанном списке на основе значения узла! Код не дает результат для этого случая. У меня только один элемент в списке, и я удалил его. Поэтому результирующий должен быть пустым набором. Но поскольку я принял p.value = p.next .value он снова указывает на себя и то же значение находится в списке! Может кто-нибудь мне помочь! Thanx заранее! :)Циркуляр Связанный список в python

ответ

2

Самое легкое решение здесь - иметь фиктивный узел, указывающий на себя в случае пустого списка. Как следствие, в пустом списке есть один узел, который указывает на себя (фиктивный), в списке с одним элементом фиктивный указывает на элемент, а элемент указывает на манекен.

Избегает необходимости в каких-либо особых случаях и, как правило, упрощает код. Чтобы проверить, пустой ли список, вы можете просто сделать dummy.next is dummy, также приятно.

+0

Ty .. Просто положите петлю if! Отлично работает для всех случаев! :) – user2205015