/** * 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) { if(list1 == NULL) return list2; // list1의 값이 없으면 list2 반환 else if(list2 == NULL) return list1; // list2가 NULL이면 list1 반환. ListNode* list3; // 정답 리스트노드 if(list1->val < list2->val) // 만약 list1의 첫 밸류가 lsit2 보다 작다면 { list3 = list1; //list3의 시작을 list1으로 한다. list1 = list1->next; //list1은 다음의 listnode를 가리킨다. } else // list2가 작거나 같으면 { list3 = list2; //list3의 시작을 list1으로 한다. list2 = list2->next; //list2는 다음의 listnode를 가리킨다. } ListNode* path = list3; // path는 list3의 처음노드부터 끝까지 길을 이어줄 역할을 하는 노드. while(list1 != NULL && list2 != NULL) // 길을 찾을 listnode 둘 다 NULL이 아니면 비교하는 while문 { if(list1->val < list2->val) // list1의 val이 list2의 val보다 작으면 { path->next = list1; // 다음 길은 list1으로 놓는다. list1 = list1->next; // list1은 list1의 next로 설정 } else // list2의 val이 list1의 val보다 작거나 같으면 { path->next = list2; // 다음 길은 list2로 설정 list2 = list2->next; // list2는 list2의 next로 설정 } path = path->next; // 다음길을 탐색하기위해 현재node에서 다음node로 바꾼다. } if(list1 != NULL) // list1이 NULL이 아니면 list2는 NULL이다. 나머지 노드들을 연결해줌. { path->next = list1; } else // list2 위와 동일. { path->next = list2; } return list3; } };
class Solution { public: ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) { if(list1 == NULL) return list2; // list1의 값이 없으면 list2 반환 else if(list2 == NULL) return list1; // list2가 NULL이면 list1 반환. if(list1 -> val < list2 -> val) { list1->next = mergeTwoLists(list1->next, list2); return list1; } else { list2->next = mergeTwoLists(list1, list2->next); return list2; } } };