本文摘自PHP中文网,作者青灯夜游,侵删。
本篇文章通过代码示例介绍一下使用c语言合并两个有序链表的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。
教程推荐:《c语言教程视频》
c语言实现两个有序链表的合并
现有两个有序单链表,通过代码实现将两个单链表合并为一个有序的新表,要求使用旧表的空间,不能新分配内存
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 | #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;
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语言fun函数有什么例题?
C语言中用于结构化程序设计的三种基本结构是什么
C语言中在main函数中定义的变量是全局变量么
学好C语言可以干什么?
C语言打印菱形
C语言常量的正确表示方法有哪些
C语言换行符号是什么?
一个c源程序必须包含一个main函数吗
vs2017怎么编写C语言
适合小白入门C语言的简单教程
更多相关阅读请进入《C语言》频道 >>
转载请注明出处:木庄网络博客 » c语言实现两个有序链表的合并(代码示例)