Leetcode --- Merge Two Sorted Lists
===
## Iteration
類似使用兩個pt去指向當前要比較的對象,依序往下比較
```cpp=
/**
* 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* resHead= new ListNode();
auto resPt= resHead;
while(list1 || list2)
{
if(list1 == NULL)
{
resPt->next= list2;
break;
}
else if(list2 == NULL)
{
resPt->next= list1;
break;
}
else
{
auto cur= new ListNode();
if(list1->val <= list2->val)
{
cur->val= list1->val;
list1= list1->next;
}
else
{
cur->val= list2->val;
list2= list2->next;
}
resPt->next= cur;
resPt= resPt->next;
}
}
auto tmp= resHead;
resHead= resHead->next;
delete tmp;
return resHead;
}
};
```
## Recursion
核心想法: mergeTwoLists這個function會幫我處理除了當前節點外的排序
case 1: l1或l2為空,返回l2或l1
case 2: l1.val <= l2,確定l1是比較小的,所以l1.next去接排序好的list(就是mergeTwoLists)
case 3: l1.val > l2,跟case2相反
```cpp=
/**
* 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) return list2;
if(!list2) return list1;
if(list1->val <= list2->val)
{
list1->next = mergeTwoLists(list1->next, list2);
return list1;
}
else
{
list2->next= mergeTwoLists(list1, list2->next);
return list2;
}
}
};
```