思路:先选择最小的作为Head,每次从两个队列中取最小的挂到Head后面,如果一个合并空,后面直接挂。此外判断几个为空链表的情况
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* ListNode(int x) : val(x), next(nullptr) {}
* };
*/
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param pHead1 ListNode类
* @param pHead2 ListNode类
* @return ListNode类
*/
ListNode* Merge(ListNode* pHead1, ListNode* pHead2) {
// write code here
//如果两个链表为空,则返回null值
if(pHead1 == nullptr && pHead1 == nullptr)
{
return nullptr;
}
//如果两个链表中一个为空,一个为非空,则返回非空一个链表的链头
if(pHead1 == nullptr && pHead1 != nullptr)
{
return pHead2;
}
if(pHead1 != nullptr && pHead2 == nullptr)
{
return pHead1;
}
ListNode* Head=nullptr;
ListNode* cur1=pHead1;
ListNode* cur2=pHead2;
if(cur1->val<=cur2->val){
//则head是pHead1
Head=pHead1;
cur1=cur1->next;
}
else if(cur1->val>cur2->val){
//则head是pHead1
Head=pHead2;
cur2=cur2->next;
}
ListNode* Temp=Head;
while(cur1!=nullptr&&cur2!=nullptr){
//P1_f P1_r P2_f P2_r
if(cur1->val<=cur2->val){
//则head是pHead1
Temp->next=cur1;
Temp=Temp->next;
cur1=cur1->next;
}
else if(cur1->val>cur2->val){
//则head是pHead1
Temp->next=cur2;
Temp=Temp->next;
cur2=cur2->next;
}
}
while(cur1!=nullptr){
Temp->next=cur1;
Temp=Temp->next;
cur1=cur1->next;
}
while(cur2!=nullptr){
Temp->next=cur2;
Temp=Temp->next;
cur2=cur2->next;
}
return Head;
}
};