题解 | #合并两个排序的链表#
合并两个排序的链表
https://www.nowcoder.com/practice/d8b6b4358f774294a89de2a6ac4d9337
//思路 比较,尾插法。 //从头开始比较两个链表的大小,小的结点拿去尾插到一个新链表中,较大的链表指针不动, //进入下一次比较。 struct ListNode* Merge(struct ListNode* pHead1, struct ListNode* pHead2 ) { struct ListNode* p1=pHead1; struct ListNode* p2=pHead2; if(p1==NULL&&p2!=NULL)//对特殊情况的处理 { return p2; } else if(p2==NULL&&p1!=NULL) { return p1; } struct ListNode* p3head=NULL;//新链表的头和尾 struct ListNode* p3tail=NULL; while(p1&&p2)//进行比较尾插,当其中一个链表为空时停止 { if(p1->val<=p2->val)//p1的val更小时 { if(p3head==NULL) { p3head=p3tail=p1; p1=p1->next; } else { p3tail->next=p1; p3tail=p1; p1=p1->next; } } else //p2更小时 { if(p3head==NULL) { p3head=p3tail=p2; p2=p2->next; } else { p3tail->next=p2; p3tail=p2; p2=p2->next; } } } if(p1==NULL&&p2!=NULL)//将新链表的尾与未空的链表的头链接 { p3tail->next=p2; } else if(p2==NULL&&p1!=NULL) { p3tail->next=p1; } return p3head; }