C语言单链表(正序)爱吃窝窝头2023-11-302023-11-30//2022.9.28 建立多个正序单链表并合并 #include<stdio.h>#include<stdlib.h>typedef struct node { int data; struct node* next;}node;node* initlist() { node* l, * t; l = (node*)malloc(sizeof(node)); if (!l) exit(0); l->next = NULL; t = l; return l;//返回头指针}//创建链表void creat(node* l, int n) { node* p, * t; t = l; int i; for (i = 1; i <= n; i++) { p = (node*)malloc(sizeof(node)); if (!p) exit(0); scanf("%d", &p->data); p->next = NULL; t->next = p; t = p; }}//历遍(输出)void output(node* l) { node* p; p = l->next; while (p) { printf("%d ", p->data); p = p->next; } printf("\n");}//合并链表node* merge(node* l1, node* l2) { node* p, * i, * j, * t; i = l1->next; j = l2->next; //比较两个链表第一个节点的大小 if(i->data<=j->data){ t = l1; } else { t = l2; } //将头节点给临时变量p p = t; while (i && j) { if (i->data < j->data)//判断那一个作为第一个节点 { p->next = i; p = i; i = i->next; } else { p->next = j; p = j; j = j->next; } //如果其中一个链表较长将剩余的加在后面 if (i) { p->next = i; } else if(j) { p->next = j; } } return t;}void main() { int n, m; node* l1, * l2, * l; l1 = initlist(); l2 = initlist(); printf("请输入l1链表的长度:"); scanf("%d", &n); printf("请输入了l1中的元素:"); creat(l1, n); printf("输出l1的结果:\n"); output(l1); printf("请输入l2链表的长度:"); scanf("%d", &m); printf("请输入了l2中的元素:"); creat(l2, m); printf("输出l2的结果:\n"); output(l2); l = merge(l1, l2); printf("输出合并链表l的值:\n"); output(l);}