728x90
[문제] 21. Merge Two Sorted Lists
Merge two sorted linked lists and return it as a sorted list.
The list should be made by splicing together the nodes of the first two lists.
[예시]
Input | Output |
l1 = [1,2,4], l2 = [1,3,4] | [1,1,2,3,4,4] |
l1 = [], l2 = [] | [] |
l1 = [], l2 = [0] | [0] |
[풀이]
/**
* Definition for singly-linked list.
* function ListNode(val, next) {
* this.val = (val===undefined ? 0 : val)
* this.next = (next===undefined ? null : next)
* }
*/
/**
* @param {ListNode} l1
* @param {ListNode} l2
* @return {ListNode}
*/
var mergeTwoLists = function(l1, l2) {
if(!l1 || !l2) return(l1 ? l1 : l2);
if(l1.val < l2.val){
l1.next = mergeTwoLists(l1.next, l2);
return l1;
}else{
l2.next = mergeTwoLists(l1, l2.next);
return l2;
}
};
풀다가 막혀서 해설에서 힌트를 얻었다.
재귀로 풀 생각을 못 했는데 너무 간단해서 이 해설을 참고하였다.
우선, l1과 l2가 빈 리스트라면 출력도 []이다. (예시2)
그리고 l1 혹은 l2가 빈 리스트이고, 나머지 리스트에 숫자 하나가 들어가 있으면 출력은 그 숫자이다. (예시3)
이 두가지를 합친게 2번째 줄이다. (주석 제외)
그리고 나머지 풀이를 보면 꽤 간단하다.
l1의 val보다 l2의 val이 더 큰 경우, l1의 next는 l1의 next와 l2를 다시 비교하게 된다. (재귀)
그리고 l1을 반환하게 된다.
l2의 val보다 l1의 val이 크거나 같은 경우도 위의 순서와 마찬가지다.
320x100
'알고리즘 > LeetCode' 카테고리의 다른 글
[파이썬/알고리즘] Leetcode - 937. Reorder Data in Log Files (0) | 2021.07.03 |
---|---|
[파이썬/알고리즘] Leetcode - 1689. Partitioning Into Minimum Number Of Deci-Binary Numb (0) | 2021.06.28 |
[자바스크립트/알고리즘] Leetcode - 부분 배열의 최대합 (0) | 2021.03.13 |
[자바스크립트/알고리즘] LeetCode - 회문 정수 (1) | 2021.03.07 |