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