void MergeList(Linklist La,Linklist Lb,Linklist *Lc) { Linklist pa,pb,pc,q; pa=La->next; pb=Lb->next; (*Lc)=pc=La; while(pa && pb) { if(pa->data<pb->data) { pc->next=pa; pc=pa; pa=pa->next; } else if(pa->data>pb->data) { pc->next=pb; pc=pb; pb=pb->next; } else { pc->next=pa; pc=pa; pa=pa->next; q=pb->next; free(pb); pb =q; } } pc->next=pa?pa:pb; free(Lb); }
int main() { int a[5]={1,3,12,13,14}; int b[5]={2,4,6,8,10}; Linklist L1; Linklist L2; Linklist L3; int i; L1 = (Lnode*)malloc(sizeof(Lnode)); L1->next = NULL; L1->data = 0; L2 = (Lnode*)malloc(sizeof(Lnode)); L2->next = NULL; L2->data = 0; L3 = (Lnode*)malloc(sizeof(Lnode)); L3->next = NULL; L3->data = 0; for(i=0;i<5;i++){ Linklist_biu(L1,a[i]); Linklist_biu(L2,b[i]); } Linklist_print(L1); Linklist_print(L2); MergeList(L1,L2,&L3); Linklist_print(L3); return 0; }

本文介绍了一个用于合并两个已排序链表的C语言实现算法。该算法通过比较两个链表节点的数据值来完成合并操作,并考虑了数据相同时的特殊处理方式。文章还提供了一个具体的示例程序,演示了如何创建链表、填充数据并调用合并函数。
1684

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



