
思路:先选择最小的作为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;
- }
- };