본문 바로가기
Problem solving/LeetCode

[LeetCode] 21. Merge Two Sorted Lists (C++)

by 겸 2023. 6. 30.

문제

정렬된 두개의 링크드 리스트가 주어진다.

두개의 리스트를 하나의 정렬된 리스트로 합병하기

생각할 것

  1. 결괏값을 리턴하기 위해 미리 head를 저장해 둘 노드 생성하기
ListNode* resH = new ListNode();
ListNode* res = resH;

...

return resH -> next;
  1. 값의 크기를 하나씩 비교하기
  2. 한 쪽의 리스트가 먼저 끝나면 다른 하나의 리스트를 연결하고 반복을 종료하기

코드

/**
 * 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;
    }
};
반응형