题解 | #合并两个排序的链表#
合并两个排序的链表
https://www.nowcoder.com/practice/d8b6b4358f774294a89de2a6ac4d9337
/*
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){//特判
return pHead2;
}
//一个链表插入到另一个链表中
ListNode* res = new ListNode(INT_MIN);
res->next = pHead1;
ListNode* pre = res;
ListNode* cur = pre->next; //用于pHead1
while(pHead2){
int hasInsert = 0;
int isTail = 0;
while(!hasInsert){
if(cur->val > pHead2->val){
ListNode* tmp = pHead2->next;
pHead2->next = cur;
pre->next = pHead2;
pre = pre->next;
pHead2 = tmp;
hasInsert = 1;
break;
}else if(cur->next){
pre = pre->next;
cur = pre->next;
}else{
isTail = 1;
break;
}
}
if(isTail == 1){
cur->next = pHead2;
break;
}
}
return res->next;
}
};
主要思路为将一个链表插入到另一个链表中,因为都是递增的链表,所以pHead2(不一定是开头那个,为了省空间没有新建)一定大于cur, 所以只要递增cur找到比pHead2大的cur, 插到前面就好,如果没找到,说明到尾部了,之间把后面的都接上去。