|
| 1 | +/** |
| 2 | + * ๋ฌธ์ ์ ์ |
| 3 | + * ์
๋ ฅ: ๋ ๊ฐ์ ์ ๋ ฌ๋ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ํค๋ ๋
ธ๋ list1๊ณผ list2 |
| 4 | + * ์ถ๋ ฅ: ๋ ๋ฆฌ์คํธ๋ฅผ ๋ณํฉํ ์ ๋ ฌ๋ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ํค๋ ๋
ธ๋ |
| 5 | + * ์กฐ๊ฑด: ๋ ๋ฆฌ์คํธ๋ ์ด๋ฏธ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ๋์ด ์์ |
| 6 | + * |
| 7 | + * ์ ๊ทผ ๋ฐฉ๋ฒ |
| 8 | + * 1. ๋๋ฏธ ํค๋ ๋
ธ๋๋ฅผ ์์ฑํ์ฌ ๊ฒฐ๊ณผ ๋ฆฌ์คํธ์ ์์์ ์ ์ค์ |
| 9 | + * 2. ๋ ๋ฆฌ์คํธ๋ฅผ ์ํํ๋ฉฐ ์์ ๊ฐ์ ๊ฐ์ง ๋
ธ๋๋ฅผ ๊ฒฐ๊ณผ ๋ฆฌ์คํธ์ ์ถ๊ฐ |
| 10 | + * 3. ํ ๋ฆฌ์คํธ๊ฐ ๋๋๋ฉด ๋ค๋ฅธ ๋ฆฌ์คํธ์ ๋จ์ ๋
ธ๋๋ฅผ ๊ฒฐ๊ณผ ๋ฆฌ์คํธ์ ์ฐ๊ฒฐ |
| 11 | + * 4. ๋๋ฏธ ํค๋์ ๋ค์ ๋
ธ๋๋ฅผ ๋ฐํํ์ฌ ๊ฒฐ๊ณผ ๋ฆฌ์คํธ๋ฅผ ๋ฐํ |
| 12 | + * 5. ์๊ฐ ๋ณต์ก๋: O(n + m) (n: list1์ ๊ธธ์ด, m: list2์ ๊ธธ์ด) |
| 13 | + * ๊ณต๊ฐ ๋ณต์ก๋: O(1) (์ถ๊ฐ์ ์ธ ๊ณต๊ฐ ์ฌ์ฉ ์์) |
| 14 | + * |
| 15 | + * ์ฌ๊ท์ ์ผ๋ก ๊ตฌํํ ์๋ ์์ง๋ง, ๊ณต๊ฐ๋ณต์ก๋๋ ์ฌ๊ทํธ์ถ ์คํ ๋๋ฌธ์ O(n + m)์ด ๋จ |
| 16 | + * ๋ฐ๋ผ์, ๋ฐ๋ณต์ (iterative) ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ฌ ๊ณต๊ฐ๋ณต์ก๋๋ฅผ O(1)๋ก ์ ์งํ๋ ๊ฒ์ด ์ข์ |
| 17 | + */ |
| 18 | + |
| 19 | +/** |
| 20 | + * @param {ListNode} list1 - ์ฒซ ๋ฒ์งธ ์ ๋ ฌ๋ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ํค๋ |
| 21 | + * @param {ListNode} list2 - ๋ ๋ฒ์งธ ์ ๋ ฌ๋ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ํค๋ |
| 22 | + * @return {ListNode} - ๋ณํฉ๋ ์ ๋ ฌ ๋ฆฌ์คํธ์ ํค๋ |
| 23 | + */ |
| 24 | +var mergeTwoLists = function (list1, list2) { |
| 25 | + let dummy = new ListNode(-1); // ๋๋ฏธ ํค๋ ๋
ธ๋ ์์ฑ (๊ฒฐ๊ณผ ๋ฆฌ์คํธ์ ์์์ ) |
| 26 | + |
| 27 | + let current = dummy; // ํ์ฌ ๊ฒฐ๊ณผ ๋ฆฌ์คํธ์ ์์น๋ฅผ ์ถ์ ํ๋ ํฌ์ธํฐ |
| 28 | + |
| 29 | + while (list1 !== null && list2 !== null) { |
| 30 | + if (list1.val <= list2.val) { |
| 31 | + current.next = list1; |
| 32 | + list1 = list1.next; |
| 33 | + } else { |
| 34 | + current.next = list2; |
| 35 | + list2 = list2.next; |
| 36 | + } |
| 37 | + // ๊ฒฐ๊ณผ ๋ฆฌ์คํธ์ ํฌ์ธํฐ ์ด๋ใฑใฑ |
| 38 | + current = current.next; |
| 39 | + } |
| 40 | + |
| 41 | + // ๋จ์์๋ ๋
ธ๋๋ค์ ๊ฒฐ๊ณผ ๋ฆฌ์คํธ์ ์ฐ๊ฒฐ (list1์ด๋ list2 ์ค ํ๋๋ ์ด๋ฏธ null์ผ ํ
๋๊น) |
| 42 | + current.next = list1 !== null ? list1 : list2; |
| 43 | + |
| 44 | + // ๋๋ฏธ ํค๋ ๋ค์ ๋
ธ๋๊ฐ ์ค์ ๊ฒฐ๊ณผ์ ์์ ๋
ธ๋๊ฐ ๋จ |
| 45 | + return dummy.next; |
| 46 | +}; |
0 commit comments