题目描述
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
解题思路:题目不难,重要的是代码的完整性与鲁棒性,新建一个虚拟头结点和一个cur结点,和两个指针分别指向两个待合并的链表头,然后依次比较结点,将小的节点挂到头结点后面,然后维护cur结点,指向已排好序的链表尾。
解题代码:
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* Merge(ListNode* pHead1, ListNode* pHead2)
{
if(pHead1==nullptr)
return pHead2;
if(pHead2==nullptr)
return pHead1;
ListNode* dummy=new ListNode(-1);
ListNode* p1=pHead1;
ListNode* p2=pHead2;
ListNode* cur=dummy;
while(p1!=nullptr && p2!=nullptr)
{
if((p1->val)<(p2->val))
{
cur->next=p1;
p1=p1->next;
}
else
{
cur->next=p2;
p2=p2->next;
}
cur=cur->next;
}
if(p1==nullptr)
cur->next=p2;
if(p2==nullptr)
cur->next=p1;
return dummy->next;
}
};