题目:将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
单向链表合并比较简单,但是想通过PTA的测试还是要注意审题的。
注意点1:规定了原链表和返回的链表都有头节点。
注意点2:输出样例除了要求输出的L正确,原来的L1,L2都要输出NULL。(就是这一点不注意导致一直卡着没AC)并且空链表也是要有头结点的,让L1,L2本身值为NULL是不行的,那样L1,L2就不再是链表了。
List Merge( List L1, List L2 )
{
//List L;
//List Temp = L;
List L, Temp, p1, p2;
L = (List)malloc(sizeof(struct Node));
Temp = L;
p1=L1->Next;
p2=L2->Next;
while(p1!=NULL && p2!=NULL)
{
if(p1->Data <= p2->Data){
Temp->Next = p1;
p1 = p1->Next;
Temp = Temp->Next;
}
else{
Temp->Next = p2;
p2 = p2->Next;
Temp = Temp->Next;
}
}
if(p1==NULL)Temp->Next = p2;
if(p2==NULL)Temp->Next = p1;
L1->Next=NULL;
L2->Next=NULL;//注意输出格式要求
return L;
}
补充一些其他回答:https://blog.youkuaiyun.com/Dr_S_/article/details/78638609
用递归实现的:https://blog.youkuaiyun.com/biezhihua/article/details/79935765
《算法笔记》书上P139两个序列的合并问题和这个一样,书上使用数组的形式实现的。