我是靠谱客的博主 迷路芝麻,这篇文章主要介绍c语言实现两个有序链表的合并(代码示例),现在分享给大家,希望可以做个参考。

本篇文章通过代码示例介绍一下使用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;//储存数据 /* 将最后结点的next区域指向新结点 将新结点的next区域指向设置为空 */ l->next = l1; l1->next = NULL; l = l->next; } }}void printfList(list *l){ printf("该链表内容为:n"); while (l->next) { printf("%dt", 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语言实现两个有序链表内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(134)

评论列表共有 0 条评论

立即
投稿
返回
顶部