Skip to content

Commit f948b26

Browse files
committed
Solution: Merge Two Sorted Lists
1 parent be3b1fa commit f948b26

File tree

1 file changed

+57
-0
lines changed

1 file changed

+57
-0
lines changed

merge-two-sorted-lists/flynn.cpp

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
/**
2+
* 풀이
3+
* - 주어진 두 링크드리스트의 각 node를 비교하며 반환할 새 링크드리스트에 추가해줍니다
4+
*
5+
* Big O
6+
* - N: 주어진 두 링크드리스트 list1, list2의 노드 개수의 총합
7+
*
8+
* - Time complexity: O(N)
9+
* - Space complexity: O(1)
10+
* - 반환하는 링크드리스트를 복잡도에 포함시키지 않을 시, 공간복잡도는 N에 상관 없이 일정합니다
11+
*/
12+
13+
/**
14+
* Definition for singly-linked list.
15+
* struct ListNode {
16+
* int val;
17+
* ListNode *next;
18+
* ListNode() : val(0), next(nullptr) {}
19+
* ListNode(int x) : val(x), next(nullptr) {}
20+
* ListNode(int x, ListNode *next) : val(x), next(next) {}
21+
* };
22+
*/
23+
class Solution {
24+
public:
25+
ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {
26+
ListNode* head = new ListNode();
27+
ListNode* node = head;
28+
29+
ListNode* p = list1;
30+
ListNode* q = list2;
31+
32+
while (p != nullptr && q != nullptr) {
33+
if (p->val < q->val) {
34+
node->next = p;
35+
p = p->next;
36+
} else {
37+
node->next = q;
38+
q = q->next;
39+
}
40+
node = node->next;
41+
}
42+
43+
while (p != nullptr) {
44+
node->next = p;
45+
p = p->next;
46+
node = node->next;
47+
}
48+
49+
while (q != nullptr) {
50+
node->next = q;
51+
q = q->next;
52+
node = node->next;
53+
}
54+
55+
return head->next;
56+
}
57+
};

0 commit comments

Comments
 (0)