반응형
1. 문제

- 두 단일 연결 리스트가 정렬된 채로 주어질 때, 오름차순으로 정렬된 1개의 단일 연결리스트를 반환하라.
/**
* 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 mergeTwoLists(list1: ListNode | null, list2: ListNode | null): ListNode | null {
let dummy = new ListNode(0);
let dummyP = dummy;
let p1 = list1, p2 = list2;
while(p1 && p2) {
if(p1.val <= p2.val) {
dummyP.next = p1;
p1 = p1.next;
} else {
dummyP.next = p2;
p2 = p2.next;
}
dummyP = dummyP.next;
}
dummyP.next = p1 || p2;
return dummy.next;
};
- 연결 리스트에서 head에 대한 추가, 삭제 연산이 있으면 복잡해지는 문제를 간단하게 만들어 준다는 dummy 노드를 사용해 보았다. 솔직히 무슨 장점이 있는 지는 모르겠다. 코드가 깔끔해진다?
- 두 리스트를 탐색하면서, 크기를 비교한 뒤 작은 값을 가지는 노드부터 dummy 노드에 연결해준다.
- 마지막으로, 남아있는 리스트는 붙여준다.