1 #include<iostream>
2 #include<cstdlib>
3 using namespace std;
4 #define MAXa 5//La链表中的元素数量
5 #define MAXb 7//Lb链表中的元素数量
6 typedef struct node{//定义链表中的节点
7 int data;//存储数据
8 struct node *next;//存储指向下一个节点的指针
9 }Lnode;
10 void creatlist(Lnode *head, int *arr, int n);//创建链表
11 void printlist(Lnode *head);//打印链表
12 void mergelist(Lnode *headA, Lnode *headB, Lnode *headC);//合并链表
13 int main(){
14 int a[MAXa] = { 1, 3, 5, 7, 9 };//先将元素存储到数组中,再存到链表中
15 int b[MAXb] = { 2, 4, 6, 8, 10 ,11,45};
16 Lnode *La, *Lb, *Lc;//分别定义La链表、Lb链表、Lc链表的头节点
17 La = (Lnode*)malloc(sizeof(Lnode));//动态分配空间
18 La->next = NULL;//头节点中指针成员为空
19 Lb = (Lnode*)malloc(sizeof(Lnode));//动态分配空间
20 Lb->next = NULL;//头节点中指针成员为空
21 Lc = (Lnode*)malloc(sizeof(Lnode));//动态分配空间
22 Lc->next = NULL;//头节点中指针成员为空
23 creatlist(La, a, MAXa);//创建链表La
24 creatlist(Lb, b, MAXb);//创建链表Lb
25 cout << "La链表合并前:";
26 printlist(La);//打印合并前的链表La
27 cout << "Lb链表合并前:";
28 printlist(Lb);//打印合并前的链表Lb
29 mergelist(La, Lb, Lc);//将La链表和Lb链表合并 ,存到Lc链表中
30 cout << "La链表和Lb链表合并后:";
31 printlist(Lc);//打印Lc链表
32 return 0;
33 }
34 void creatlist(Lnode *head, int *arr, int n){//尾插法创建链表
35 Lnode *tail, *s;//定义一个尾指针,和s指针,s指针用来接受数组中的元素
36 tail = head;//尾指针指向头指针
37 for (int i = 0; i<n; i++){//将数组中的元素存到链表中
38 s = (Lnode*)malloc(sizeof(Lnode));//给s分配一块空间
39 s->data = arr[i];//将数组中的一个元素存到s所指向节点的data成员中
40 s->next = NULL;// 将s所指向节点的指针成员置空
41 tail->next = s;//尾指针所指向的节点的指针成员指向s所指向的节点
42 tail = s;//尾指针指向s指针所指向的节点
43 }
44 }
45 void printlist(Lnode *head){//打印链表
46 Lnode *p = head->next;//p指向链表中的第一个元素
47 if (p == NULL){//如果链表中没有元素
48 cout << "链表为空!";
49 return;
50 }
51 while (p != NULL){//当p不为空时
52 cout << p->data << ' ';//输出p所指向节点的data成员和空格
53 p = p->next;//p指向p所指向节点的指针成员所指向的节点
54 }
55 cout << endl;//换行
56 }
57 void mergelist(Lnode *headA, Lnode *headB, Lnode *headC){//合并链表
58 Lnode *tail = headC;//定义尾指针指向headc所指向的节点
59 Lnode *pa = headA->next;// 定义pa指向La链表头节点的下一个节点
60 Lnode *pb = headB->next;//定义pb指向Lb链表头节点的下一个节点
61 while ((pa != NULL) && (pb != NULL)){//当pa和pb都不为空时
62 if (pa->data<pb->data){//如果pa所指向节点的data成员小于pb所指向节点的data成员
63 tail->next = pa;//tail指针所指向的节点的指针成员指向pa所指向的节点
64 pa = pa->next;//pa指针指向pa指针所指向的节点的指针成员所指向的节点
65 tail = tail->next;//tail指向tail所指向节点的指针成员所指向的节点
66 //以上三步就是让pa所指向的节点连接到Lc链表后面
67 }
68 else{
69 tail->next = pb;//tail指针所指向的节点的指针成员指向pb所指向的节点
70 pb = pb->next;//pb指向pb所指向节点的指针成员所指向的节点
71 tail = tail->next;//tail指针指向tail指针所指向节点指针成员所指向的节点
72 //以上三步就是让pb所指向的节点连接到LC链表后面
73 }
74 }
75 if (pa != NULL){//如果La链表还有元素没有加入到LC链表
76 tail->next = pa;//将La链表剩余元素连接到Lc链表后
77 }
78 if (pb != NULL){//如果Lb链表还有元素没有加入到Lc链表
79 tail->next = pb;//将Lb链表剩余元素连接到Lc链表后
80 }
81 }
来源:https://www.cnblogs.com/fate-/p/12522117.html