题目描述
首刷自解:
ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {
if (list1 == nullptr || list2 == nullptr)
return list1 == nullptr ? list2 : list1;
ListNode* ptr1 = list1, * ptr2 = list2, ** ptr3 = nullptr, *list3 = nullptr;
if (ptr1->val <= ptr2->val)
{
list3 = new ListNode(ptr1->val);
ptr1 = ptr1->next;
ptr3 = &list3->next;
}
else
{
list3 = new ListNode(ptr2->val);
ptr2 = ptr2->next;
ptr3 = &list3->next;
}
while (ptr1 != nullptr && ptr2 != nullptr)
{
if (ptr1->val <= ptr2->val)
{
*ptr3 = new ListNode(ptr1->val);
ptr1 = ptr1->next;
ptr3 = &(*ptr3)->next;
}
else
{
*ptr3 = new ListNode(ptr2->val);
ptr2 = ptr2->next;
ptr3 = &(*ptr3)->next;
}
}
if (ptr1 == nullptr)
*ptr3 = ptr2;
else
*ptr3 = ptr1;
return list3;
}
改进看解:
ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {
if (list1 == nullptr || list2 == nullptr)
return list1 == nullptr ? list2 : list1;
ListNode *list3 = new ListNode(-1);
ListNode *ptr = list3;
while (list1 != nullptr && list2 != nullptr)
{
if (list1->val < list2->val)
{
ptr->next = list1;
list1 = list1->next;
}
else
{
ptr->next = list2;
list2 = list2->next;
}
ptr = ptr->next;
}
ptr->next = list1 == nullptr ? list1 : list2;
return list3;
}
进阶看解:
class Solution {
public:
ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {
if (list1 == nullptr || list2 == nullptr)
return list1 == nullptr ? list2 : list1;
if (list1->val < list2->val)
{
list1->next = mergeTwoLists(list1->next, list2);
return list1;
}
else
{
list2->next = mergeTwoLists(list1, list2->next);
return list2;
}
}
};