

List Insert(List L3,List tmp){
//按题意,使用原结点,不能new新结点
List L4=L3;
while(L4->Next){
L4=L4->Next;
}
//将tmp插入List最后,将tmp->Next置空
//需要注意必须提前记住tmp下一个元素,不然没法继续访问L1,L2
L4->Next=tmp;
tmp->Next=NULL;
return L3;
}
List Merge( List L1, List L2 ){
List L3=(List)malloc(sizeof(struct Node));
L3->Next=NULL;
//注意空表头的Next必须置空,判定程序的Print函数记住了原空表头的位置
//不然空表头仍然会指向新表元素
List L4=L1;List L5=L2;
L1=L1->Next;L2=L2->Next;
L4->Next=NULL;L5->Next=NULL;
List tmp,tmp1;
while(L1 && L2){
if(L1->Data<L2->Data){
tmp=L1;
L1=L1->Next;
L3=Insert(L3,tmp);
}else if(L1->Data>L2->Data){
tmp=L2;
L2=L2->Next;
L3=Insert(L3,tmp);
}else{
tmp=L1;
tmp1=L2;
L1=L1->Next;
L2=L2->Next;
L3=Insert(L3,tmp);
L3=Insert(L3,tmp1);
}
}
while(L1){
tmp=L1;
L1=L1->Next;
L3=Insert(L3,tmp);
}
while(L2){
tmp=L2;
L2=L2->Next;
L3=Insert(L3,tmp);
}
return L3;
}
本文介绍了如何使用原节点实现ListInsert函数,将新节点插入到链表末尾,并在ListMerge函数中合并两个有序链表,通过比较节点数据进行插入操作。展示了合并过程中的逻辑和细节处理。
1254

被折叠的 条评论
为什么被折叠?



