法1:常规
class Solution {
public:
ListNode* mergeTwoLists(ListNode*p1, ListNode*p2)
{
ListNode*t1, *t2;//双指针
t1 = p1, t2 = p2;
ListNode*newHead = new ListNode(-1);
ListNode*t = newHead;
while (t1 != NULL && t2 != NULL)
{
if (t1 != NULL&&t2 != NULL)
{
if (t1->val <= t2->val)
{
t->next = t1;
t1 = t1->next;
t = t->next;
}
else
{
t->next = t2;
t2 = t2->next;
t = t->next;
}
}
}
if (t1 == NULL)
{
t->next = t2;
}
else
t->next = t1;
return newHead->next;
}
};
法2:递归三部曲,很简单,不解释
class Solution {
public:
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
if (l1 == NULL)return l2;
if (l2 == NULL)return l1;
if (l1->val <= l2->val)
{
l1->next = mergeTwoLists(l1->next, l2);//已经完成了后面结点的合并
return l1;
}
else
{
l2->next = mergeTwoLists(l1, l2->next);//已经完成了后面结点的合并
return l2;
}
}
};