合并两个排序的链表

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

合并两个排序的链表
输⼊两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满⾜单调不减规则。

两种思路:递归和⾮递归
先说递归吧,
// 先判断两个链表指针是否为空,如果链表⼀为空,则返回第⼆个
// 如果链表⼆为空,则返回第⼀个.如果都是空,合并后也是空
//两个链表都是有序的,遍历链表,判断当前指针,那个链表值⼩,就把合并的链表指向它
//然后递归
class Solution {
public:
ListNode* Merge(ListNode* pHead1, ListNode* pHead2)
{
if(pHead1 == nullptr )
return pHead2;
if(pHead2 == nullptr)
return pHead1;
ListNode *pNew = nullptr;
if(pHead1->val < pHead2->val)
{
pNew = pHead1;
pNew->next = Merge(pHead1->next, pHead2);
}
else
{
pNew = pHead2;
pNew->next = Merge(pHead1, pHead2->next);
}
return pNew;
}
};
⾮递归:
思路:
申请⼀个head节点,任意保存⼀个值,⽤pNew指向它,然后进⾏迭代,最后返回head->next
// 利⽤⼀个辅助空间head,pNew指向它,返回它的后⼀个节点
class Solution {
public:
ListNode* Merge(ListNode* pHead1, ListNode* pHead2)
{
if(pHead1 == nullptr )
return pHead2;
if(pHead2 == nullptr)
return pHead1;
// 存放中间变量
ListNode *head = new ListNode(1);
ListNode *pNew = head;
while(pHead1!=nullptr && pHead2 != nullptr)
{
if (pHead1->val < pHead2->val)
{
pNew->next = pHead1;
pHead1 = pHead1->next;
}
else
{
pNew->next = pHead2;
pHead2 = pHead2->next;
}
pNew = pNew->next;
}
if (pHead1 != nullptr)
pNew->next = pHead1;
if(pHead2 != nullptr)
pNew->next = pHead2;
return head->next;
}
};。

相关文档
最新文档