반응형
1. 문제
- 단일 연결 리스트와 val가 주어질 때, val와 일치하는 노드를 제거한 리스트를 반환하라.
2. 해결
/**
* Definition for singly-linked list.
* class ListNode {
* val: number
* next: ListNode | null
* constructor(val?: number, next?: ListNode | null) {
* this.val = (val===undefined ? 0 : val)
* this.next = (next===undefined ? null : next)
* }
* }
*/
function removeElements(head: ListNode | null, val: number): ListNode | null {
let p1 = head;
while(p1) {
if(p1.val === val) {
head = p1.next;
} else if(p1.next && p1.next.val === val) {
let temp = p1.next.next;
while(temp && temp.val === val) temp = temp.next;
p1.next = temp;
}
p1 = p1.next;
}
return head;
};
- 연결 리스트를 탐색하면서, 현재 포인터의 다음 노드를 이용해서 val와 비교한다.
- 첫 번째 노드가 val와 일치하는 경우는 head에서 일치하는 경우밖에 없다.
- 현재 포인터의 다음 노드의 값이 일치할 때, 연속해서 일치하는 값을 가지는 노드가 존재할 수 있으므로 반복.