RemoveLinkedListElements

Published at 2021-11-16

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def removeElements(self, head: Optional[ListNode], val: int) -> Optional[ListNode]:
        prev, curr = None, head  # prev는 -1, curr은 0번 인덱스라고 생각하면 됨
        while curr:
            if curr.val == val:  # 현재포인터의 값이 제거해야 될 값이면
                # 근데 맨 처음은 prev가 없는 상태니까 검사 한번 해줌
                if prev:  # prev가 있으면(=제거해야될값이 첫빠따가 아니면)
                    prev.next = curr.next  # curr은 prev보다 한 포인터 뒤니까. 건너뛰고 붙여줌
                else:
                    head = curr.next  # 첫빠따면 걔 없애고 두번째꺼 붙임
                curr = curr.next  # 검사 끝났으면 한칸 다음꺼
            else:
                prev, curr = curr, curr.next  # 제거해야될 값 아니면 둘 다 한칸씩 다음꺼
        return head