#include <stdio.h>
#include <stdlib.h>
typedef struct Lnone
{
int date;
struct Lnone *next;
} Lnode, *linklist;
void createlist(linklist L)
{
L = (linklist)malloc(sizeof(Lnode)); //建一个头结点
L->next = NULL;
linklist t = L; //建一个前指针指向头结点
do
{
linklist p;
p = (linklist)malloc(sizeof(Lnode)); //建一个新节点
p->next = NULL;
scanf("%d", &(p->date)); //给新节点数据域赋值
t->next = p; //新节点与前一结点连接
t = t->next; //前节点后移
} while (t->date != -1); //输入-1后结束
}
void mergelist(linklist La, linklist Lb, linklist Lc) //合并a,b链表为c
{
linklist a, b, c;
a = La->next;
b = Lb->next;
c = Lc;
while (a->date != -1 && b->date != -1) //一个一个比较,等-1参与比较时停止
{
if (a->date <= b->date) //谁小就先进入c
{
c->next = a;
c = a;
a = a->next;
}
if (a->date > b->date)
{
c->next = b;
c = b;
b = b->next;
}
}
c->next = (a->date == -1) ? b : a;
}
void printlist(linklist L)
{
linklist p = L->next;
int count = 0;
while (p->date != -1)
count++;
if(count==0)//新链表为空
printf("NULL");
for (int i = 0; i < count - 1; i++)
{
printf("%d ", p->date);
p = p->next;
}
printf("%d", p->date);
}
int main()
{
linklist La, Lb, Lc; // Lc是合并后的链表
Lc = (linklist)malloc(sizeof(Lnode)); //建立c链表的头结点
Lc->next = NULL;
createlist(La); //构造a链表
createlist(Lb); //构造b链表
mergelist(La, Lb, Lc);
printlist(Lc);
return 0;
}
void createlist(linklist L)
{
L = (linklist)malloc(sizeof(Lnode)); //建一个头结点
这样写法是不能改变外部传入的链表指针的,用指针的指针作为参数,或者返回值为指针
#include <stdio.h>
#include <stdlib.h>
typedef struct Lnone
{
int date;
struct Lnone *next;
} Lnode, *linklist;
linklist createlist(linklist L)
{
L = (linklist)malloc(sizeof(Lnode)); //建一个头结点
L->next = NULL;
linklist t = L; //建一个前指针指向头结点
do
{
linklist p;
p = (linklist)malloc(sizeof(Lnode)); //建一个新节点
p->next = NULL;
scanf("%d", &(p->date)); //给新节点数据域赋值
t->next = p; //新节点与前一结点连接
t = t->next; //前节点后移
} while (t->date != -1); //输入-1后结束
return L;
}
void mergelist(linklist La, linklist Lb, linklist Lc) //合并a,b链表为c
{
linklist a, b, c;
a = La->next;
b = Lb->next;
c = Lc;
while (a->date != -1 && b->date != -1) //一个一个比较,等-1参与比较时停止
{
if (a->date <= b->date) //谁小就先进入c
{
c->next = a;
c = a;
a = a->next;
}
if (a->date > b->date)
{
c->next = b;
c = b;
b = b->next;
}
}
c->next = (a->date == -1) ? b : a;
}
void printlist(linklist L)
{
linklist p = L->next;
int count = 0;
while (p->date != -1)
count++;
if(count==0)//新链表为空
printf("NULL");
for (int i = 0; i < count - 1; i++)
{
printf("%d ", p->date);
p = p->next;
}
printf("%d", p->date);
}
int main()
{
linklist La, Lb, Lc; // Lc是合并后的链表
Lc = (linklist)malloc(sizeof(Lnode)); //建立c链表的头结点
Lc->next = NULL;
La = createlist(La); //构造a链表
Lb = createlist(Lb); //构造b链表
mergelist(La, Lb, Lc);
printlist(Lc);
return 0;
}
哈哈哈哈哈哈哈哈