Quick actions

cmd+k|ctrl+k

Navigation

Languages

Remove Value | Python

Snippet info

Language

Python

Visibility

public

Author

ralletsfix

Created

2022-05-13T14:40:02.728009Z

Updated

2022-05-13T14:40:02.728009Z

class Node:
    def __init__(self, value, next=None):
        self.value = value
        self.next = next

    def __str__(self):
        return str(self.value)

class LinkedList:
    def __init__(self, *items):
        self.head = None
        self.tail = None
        
        self.add(*items)
   
    def add(self, *items):
        for item in items:
            self.addAtEnd(item)
       
    def addAtEnd(self, value):
        if not self.head:
            self.head = self.tail = Node(value)
        else:
            curr = self.head
            while curr.next:
                curr = curr.next
            curr.next = Node(value)
            self.tail = curr.next
    
    def elems(self):
        curr = self.head
        count = 0
        while curr:
            count += 1
            curr = curr.next
        return count
        
    def __str__(self):
        curr = self.head
        res = []
        while curr:
            res.append(str(curr.value))
            curr = curr.next
        return "->".join(res)
        
def removeValue(lst: LinkedList, value):
    # take care of values-to-be-removed at front.
    while lst.head.value == value:
        lst.head = lst.head.next

    # take care of values-to-be-removed after front.
    curr = lst.head
    prev = None
    while curr:
        if curr.value == value:
            curr = curr.next
            
            if prev:
                prev.next = curr
        else:
            prev = curr
            curr = curr.next
            
    return lst

tests = [
    ((1,2,3), 3, '1->2'),
    ((1, 2, 3,3,3,3), 3, '1->2'),
    ((8,1,1,4,12), 1, '8->4->12'),
    ((7,12,2,9), 7, '12->2->9'),
    ((7,7,7,12,2,9), 7, '12->2->9'),
]

for i, (a, value, expected) in enumerate(tests):
    l = LinkedList(*a)
    got = str(removeValue(l, value))
    if got == expected:
        print(f"PASS")
    else:
        print(f"FAIL: expected '{expected}', got '{got}'")
INFO