教程推荐:《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语言实现两个有序链表的合并(代码示例)全部内容,希望文章能够帮你解决c语言实现两个有序链表的合并(代码示例)所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)