题解 | #合并两个排序的链表#
合并两个排序的链表
https://www.nowcoder.com/practice/d8b6b4358f774294a89de2a6ac4d9337
/** * struct ListNode { * int val; * struct ListNode *next; * }; */ /** * * @param pHead1 ListNode类 * @param pHead2 ListNode类 * @return ListNode类 */ struct ListNode* Merge(struct ListNode* pHead1, struct ListNode* pHead2 ) { // write code here if(pHead1==pHead2&&pHead1==NULL)return 0; if(pHead1==NULL&&pHead2!=NULL)return pHead2; if(pHead1!=NULL&&pHead2==NULL)return pHead1; struct ListNode* head1,*head2,*head11,*head22; head1=pHead1; head2=pHead2; if((pHead2->next==NULL)&&(pHead1->next==NULL)){ if(pHead1->val>=pHead2->val){ pHead2->next=pHead1; return pHead2; }else{ pHead1->next=pHead2; return pHead1; } } if(pHead1->next==NULL){ head22=head2->next; if(head1->val<=head2->val){ head1->next=head2; return pHead1; } while(1){ if(head1->val<=head22->val){ head2->next=head1; head1->next=head22; return pHead2; } head2=head22; if(head22->next!=NULL){ head22=head22->next; } if(head2->next==NULL){ head2->next=head1; return pHead2; } } } if(pHead2->next==NULL){ head11=head1->next; if(head2->val<=head1->val){ head2->next=head1; return pHead2; } while(1){ if(head2->val<=head11->val){ head1->next=head2; head2->next=head11; return pHead1; } head1=head11; if(head11->next!=NULL){ head11=head11->next; } if(head1->next==NULL){ head1->next=head2; return pHead1; } } } head11=head1->next; head22=head2->next; if(head1->val<=head2->val){ head1->next=head2; head22=head2; head2=head1; head1=head11; if(head11!=NULL){ head11=head11->next; } while(head1!=NULL&&head22!=NULL){ if(head1->val<=head22->val){ head2->next=head1; head1->next=head22; head2=head1; head1=head11; if(head11!=NULL){ head11=head11->next; } }else if(head22!=NULL){ head2=head22; head22=head22->next; } } if(head1==NULL)return pHead1; if(head22==NULL){ head2->next=head1; return pHead1; } } if(head2->val<head1->val){ head2->next=head1; head11=head1; head1=head2; head2=head22; if(head22!=NULL){ head22=head22->next; } while(head2!=NULL&&head11!=NULL){ if(head2->val<=head11->val){ head1->next=head2; head2->next=head11; head1=head2; head2=head22; if(head22!=NULL){ head22=head22->next; } }else if(head11!=NULL){ head1=head11; head11=head11->next; } } if(head2==NULL)return pHead2; if(head11==NULL){ head1->next=head2; return pHead2; } } return pHead1; }