https://pintia.cn/problem-sets/1010070491934568448/problems/1037889290772254720
一切尽在不言中
List Merge( List L1, List L2 )
{
List L3; //得返回这个啊,怎么能忘记 //要初始化么?
//(假象空间,实际利用L1,L2空间)
L3=(List)malloc(sizeof(struct Node));//必须申请一个新头节点(L1,L2清空)
PtrToNode p1,p2,p3;
p3=L3,p1=L1->Next,p2=L2->Next; //NOT L3=p3=p1(p1没初始化) 也不是L3=p3=L1(L1会清空)
/*p1=L1->Next,p2=L2->Next;
if(p1->Data>p2->Data){
L1->Next=p2; 可合并
p1=p1->Next;
}
else p2=p2->Next;
*/
while(p1&&p2){ //No p1&&p2!=0
if(p1->Data<p2->Data){ //谁小就连在L3后面
/* p1->Next=p3->Next; //写了半天的插入,人家是建立(链接),插入会破坏L1,L2;
p3=p1->Next;*/ //插入也写错了,应该是p3->Next=p1;
p3->Next=p1;
p3=p1;
p1=p1->Next;
}
else{
/*p2->Next=p3->Next;
p3=p2->Next;*/
p3->Next=p2;
p3=p2;
p2=p2->Next;
}
} //wile在这结束了!!!
for (;p1!=0;p1=p1->Next){
/*p1->Next=p3->Next;
p3=p1->Next;*/
p3->Next=p1;
p3=p1;
}
for (;p2!=0;p2=p2->Next){
/*p2->Next=p3->Next;
p3=p2->Next;*/
p3->Next=p2;
p3=p2;
}
p3->Next=NULL;
L1->Next=NULL, L2->Next=NULL;
return L3;
}