方法一:迭代
class Solution
{
public:
ListNode* mergeTwoLists(ListNode* list1, ListNode* list2)
{
ListNode* newHead;
ListNode* curr;
if (list1 == nullptr || list2 == nullptr) //看一下两个链表中有没有哪个为空
{
return (list1 != nullptr) ? list1 : list2; //如果有就直接返回非空的那个,如果两个都空返回哪一个都行
}
if (list1->val < list2->val)
{
newHead = list1; //创建两个指针,一个记录头节点用于返回
curr = list1; //另一个记录尾节点用于添加
list1 = list1->next;
}
else
{
newHead = list2;
curr = list2;
list2 = list2->next;
}
while (list1 != nullptr && list2 != nullptr)
{
if (list1->val < list2->val)
{
curr->next = list1;
list1 = list1->next;
curr = curr->next;
}
else
{
curr->next = list2;
list2 = list2->next;
curr = curr->next;
}
}
curr->next = (list1 != nullptr) ? list1 : list2; //把剩下的直接添加就可以了
return newHead;
}
};
方法二:递归
class Solution
{
public:
ListNode* mergeTwoLists(ListNode* list1, ListNode* list2)
{
if (list1 == nullptr)
{
return list2;
}
if (list2 == nullptr)
{
return list1;
}
if (list1->val < list2->val)
{
list1->next = mergeTwoLists(list1->next, list2);
return list1;
}
list2->next = mergeTwoLists(list1, list2->next);
return list2;
}
};