Leetcode Java Merge Two Sorted Lists
업데이트:
문제
코드
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
if (l1 == null) {
return l2;
} else if (l2 == null) {
return l1;
} else {
if (l1.val < l2.val) {
l1.next = mergeTwoLists(l1.next, l2);
return l1;
} else {
l2.next = mergeTwoLists(l1, l2.next);
return l2;
}
}
}
}
결과
설명
- 주어진 두 ListNode l1, l2가 정렬되어 있으므로, 순차적으로 각 val의 값을 비교하여 ListNode를 합쳐주면 된다.
- val 값이 작은 ListNode의 next의 ListNode와 다른 ListNode로 재귀호출이 수행된다.
- 한 ListNode의 next 값이 null이 되면 다른 ListNode의 모든 val 값은 마지막 비교한 상대 ListNode의 val 값보다 크므로 해당 ListNode를 반환한다.
- 이제 순차적으로 val 값이 작은 ListNode의 결과에 따라서 next 값에 재귀 호출 결과가 들어가게 된다.
- 이렇게 조건문이 수행된 역순으로 각 절차가 수행되게 되면, 마지막으로 수행된 값은 순서대로 두 ListNode를 합친 ListNode가 되어 주어진 문제의 결과로 반환된다.
예제
- 주어진 문제의 Example 1을 이용하여 작업 절차를 예제로 보여주겠다.
- 각 ListNode의 초기 값은 l1 = [1, 2, 4] & l2 = [1, 2, 4]로, 재귀 호출이 반복되어 l1이 반환된다.
- l1 = 4, l2 = null
- 마지막으로 수행된 재귀호출은 l1 = 4 & l2 = 4 이므로, l1 < l2를 만족하지 않아 l2.next에 l1이 들어가게 된다.
- l1 = 4, l2 = [4, 4]
- 그 전의 경우는 l1 = 4 & l2 = 3 이므로, l1 < l2를 만족하지 않아 l2.next에 l2가 들어가게 된다.
- l1 = 4, l2 = [3, 4, 4]
- 그 전의 경우는 l1 = 2 & l2 = 3 이므로, l1 < l2를 만족하여 l1.next에 l1이 들어가게 된다.
- l1 = [2, 3, 4, 4], l2 = [3, 4, 4]
- 그 전의 경우는 l1 = 1 & l2 = 3 이므로, l1 < l2를 만족하여 l1.next에 l1이 들어가게 된다.
- l1 = [1, 2, 3, 4, 4], l2 = [3, 4, 4]
- 최초 재귀 호출의 경우는 l1 = 1 & l2 = 1 이므로, l1 < l2를 만족하지 않아 l2.next에 l1이 들어가게 되어 l2가 주어진 문제의 결과로 반환된다.
- l1 = [1, 2, 3, 4, 4], l2 = [1, 1, 2, 3, 4, 4]
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기