Круговой связанный список в python

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 снова указывает на себя, и это же значение находится в списке! Может кто-нибудь мне помочь! Спасибо заранее! :)


person user2205015    schedule 28.05.2013    source источник


Ответы (1)


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

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

person Voo    schedule 28.05.2013
comment
Тай.. Просто поставь цикл if! Работал отлично во всех случаях! :) - person user2205015; 28.05.2013