Leetcode

203. Remove Linked List Elements

Leeter 2021. 11. 12. 10:12

Description:

Given the head of a linked list and an integer val, remove all the nodes of the linked list that has Node.val == val, and return the new head.

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
'''
[1] two pointers - inplace)

idea::
this problem can be solved using out-place. but, in-place also can be solved.

code::
def removeElements(self, head: Optional[ListNode], val: int) -> Optional[ListNode]:
    reader=writer=dummy=ListNode(-1,head)

    while writer:
        reader=writer.next
        while reader and reader.val==val:
            reader=reader.next
        writer.next=reader
        writer=writer.next
    return dummy.next
    
-T/C: O(n)
-S/C: O(1)
'''

class Solution:
    def removeElements(self, head: Optional[ListNode], val: int) -> Optional[ListNode]:
        reader=writer=dummy=ListNode(-1,head)
        
        while writer:
            reader=writer.next
            while reader and reader.val==val:
                reader=reader.next
            writer.next=reader
            writer=writer.next
        return dummy.next