Search code examples
pythonlinked-listcircular-list

Alternate way to delete a node in circular linked in python


Here is my code to delete any node from circular linked list:

def delete_node(head, value):
    p = head
    if p is None:
        return None
    if p.value == value and p.next == p:
        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
    pass

Is there any other alternate way to delete a node from circular linked list?


Solution

  • def delete(head, value):
        curr = head
        prev = curr.next
        while prev.next != head:
            prev = prev.next
    
        if curr.value == value:
            prev.next = curr.next
    
        curr = curr.next
        prev = prev.next
        while curr.value != value and curr != head:
            curr = curr.next
            prev = prev.next
    
        if curr.value == value:
            prev.next = curr.next