教程推荐:《c语言教程视频》
c语言实现两个有序链表的合并
现有两个有序单链表,通过代码实现将两个单链表合并为一个有序的新表,要求使用旧表的空间,不能新分配内存
#include <stdio.h>#include <stdlib.h>typedef struct List{int a;struct List *next;}list;void newList(list *l){//初始化头节点l->next = NULL;}void setList(list * l){//建立链表int i = 1;int j;while (i){scanf_s("%d", &j);if (j == -1){i = 0;}else{list *l1 = (list *)malloc(sizeof(list));//为新的结点分派内存l1->a = j;//储存数据/*将最后结点的next区域指向新结点将新结点的next区域指向设置为空*/l->next = l1;l1->next = NULL;l = l->next;}}}void printfList(list *l){printf("该链表内容为:\n");while (l->next){printf("%d\t", l->next->a);l = l->next;}printf("\n");}list *add(list *LA, list *LB){//记录两个链表的头结点list *la=LA;list *l = LA;list *lb = LB;//移动指针LA = LA->next;LB = LB->next;la->next = NULL;while (LA!=NULL&&LB!=NULL){/*将两个结点的数据进行比较,数据较小的结点接在头结点后面,*/if (LA->a < LB->a){la->next = LA;la = LA;LA = LA->next;}else{la->next = LB;la = LB;LB = LB->next;}}//若其中一个链表的结点已经全接在新表中则将另一个链表的剩余结点接在新表的后面if (LA){la->next = LA;}if(LB){la->next = LB;}free(lb);return l;}int main(){//为结点分配内存list *LA = (list *)malloc(sizeof(list));list *LB = (list *)malloc(sizeof(list));//初始化结点newList(LA);newList(LB);//建立链表setList(LA);setList(LB);//输出链表的内容printf("LA的数据:\n");printfList(LA);printf("LB的数据:\n");printfList(LB);list *LC = add(LA, LB);//输出合并后的新表printfList(LC);system("pause");return 0;}
更多编程相关知识,请访问:编程入门!!
以上就是c语言实现两个有序链表的合并(代码示例)的知识。速戳>>知识兔学习精品课!