class Solution:
def removeElements(self, head: Optional[ListNode], val: int) -> Optional[ListNode]:
new=ListNode() # val=0
cur=new
while head:
if head.val==val:
head=head.next
else:
cur.next=head
cur=cur.next
head=head.next
if cur.next and cur.next.val==val:
cur.next=None
return new.next
마지막 if문이 없으면 마지막으로 들어오는 노드에 의해서 뒤에 val과 같은 값을 가진 노드가 같이 따라 들어온다
class Solution:
def removeElements(self, head: Optional[ListNode], val: int) -> Optional[ListNode]:
dummy=ListNode(next=head)
prev,curr=dummy,head
while curr:
if curr.val==val:
nxt=curr.next
prev.next=nxt
curr=nxt
else:
prev=curr
curr=curr.next
return dummy.next
ListNode(next=head)
next에 head를 이렇게 넣어줄 수도 있다
prev
와 curr
은 각각 dummy와 head를 가리키는 포인터다
curr값이 존재하는 동안
값이 val과 같으면
curr.next
를 nxt
에 넣어주고
nxt를 dummy를 가리키는 prev.next에 넣어준다
curr.val==val이므로 nxt
를 curr
에 넣어준다
같지 않다면
curr을 그냥 prev에 넣어주고 (head to dummy)
curr.next
를 curr에 넣어준다