문제
정렬된 두개의 링크드 리스트가 주어진다.
두개의 리스트를 하나의 정렬된 리스트로 합병하기
생각할 것
- 결괏값을 리턴하기 위해 미리 head를 저장해 둘 노드 생성하기
ListNode* resH = new ListNode();
ListNode* res = resH;
...
return resH -> next;
- 값의 크기를 하나씩 비교하기
- 한 쪽의 리스트가 먼저 끝나면 다른 하나의 리스트를 연결하고 반복을 종료하기
코드
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {
ListNode* resH = new ListNode();
ListNode* res = resH;
while(1){
if(list1 == nullptr) {
res -> next = list2;
break;
}
if(list2 == nullptr) {
res -> next = list1;
break;
}
if(list1 -> val <= list2 -> val){
res -> next = list1;
list1 = list1 -> next;
}
else {
res -> next = list2;
list2 = list2 -> next;
}
res = res -> next;
}
return resH -> next;
}
};
반응형
'Problem solving > LeetCode' 카테고리의 다른 글
[LeetCode] 23. Merge k Sorted Lists (C++) (0) | 2023.06.30 |
---|---|
[LeetCode] 22. Generate Parentheses (C++) (0) | 2023.06.30 |
[LeetCode] 20. Valid Parentheses (C++) (0) | 2023.06.30 |
[LeetCode] 19. Remove Nth Node From End of List (C++) (0) | 2023.06.30 |