C语言实现
运行截图:
在这里我用了2中赋值方法(前插法,后插法),大家也可以采取一种,但是要注意前插法的顺序和输出的顺序是相反的。这种方法不是最简单的,后期会更新。好了上代码。
#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define ERROR -1
#define OVERFLOW -2
typedef int Status;
typedef int ElemType;
//结构体
typedef struct LNode
{
ElemType data;
struct LNode *next;
} LNode,*LinkList;
// 初始化
Status InitList (LinkList &L)
{
L = new LNode;
L->next = NULL;
return OK;
}
//显示当前数据
void SeeList(LinkList &L)
{
LinkList q;
q=L->next;
while(q)
{
printf("%5d",q->data);
q = q->next;
}
printf("\n");
}
//前插法插入数值
void AssigList_H (LinkList &L,int m)
{
int p = 0;
LinkList t;
printf("请输入要输入的值(中间用空格):");
for(p = 0;p < m;p++)
{
t = new LNode;
scanf("%d",&t->data);
t->next = L->next;
L->next = t;
}
}
//后插法插入数据
void AssigList_R(LinkList &L,int m)
{
int p = 0;
LinkList t,q;
q = L;
printf("请输入要输入的值(中间用空格):");
for(p = 0;p < m;p++)
{
t = new LNode;
scanf("%d",&t->data);
t->next = NULL;
q->next = t;
q = t;
}
}
//合并链表
void MergeList(LinkList A,LinkList B,LinkList &C)
{
LinkList a,b,c,d;
a = A->next;
b = B->next;
c = C;
while(a&&b)
{
if( a->data <=b->data)
{
d = new LNode;
d->data = a->data;
d->next = NULL;
c->next = d;
c = d;
if(a->data == b->data)
b = b->next;
a = a->next;
}
else
{
d = new LNode;
d->data = b->data;
d->next = NULL;
c->next = d;
c = d;
b = b->next;
}
}
if(a)
while (a)
{
d = new LNode;
d->data = a->data;
d->next = NULL;
c->next = d;
c = d;
a =a->next;
}
else
while(b)
{
d = new LNode;
d->data = b->data;
d->next = NULL;
c->next = d;
c = d;
b = b->next;
}
}
int main()
{
int i,m;
LinkList A,B,C;
InitList (A);
InitList (B);
InitList (C);
printf("请输入你要赋几个值给A(前插法):");
scanf("%d",&m);
AssigList_H (A,m);
printf("表A的数据为:");
SeeList(A);
printf("请输入你要赋几个值给B(后插法):");
scanf("%d",&m);
AssigList_R(B,m);
printf("表B的数据为:");
SeeList(B);
MergeList(A,B,C);
printf("合并后表的数据为:");
SeeList(C);
return 0;
}