主题:创建两个链表 实现两个链表的合并
#include <stdio.h>
#include <stdlib.h>
#define n 0
/*=========定义节点===========*/
typedef struct Lnode
{
int data;
struct Lnode *next;
}Lnode,*linklist;
linklist create_linklist()
{
linklist l,s,r;
int x;
l=(Lnode*)malloc(sizeof(Lnode));
l->next=NULL;
r=l; //用于指向当前链表的尾结点
scanf("%d",&x);
while(x!=n)
{
s=(Lnode*)malloc(sizeof(Lnode)); //生成新结点
s->data=x;
s->next = r->next;
r->next=s;
r=s; //生成的新结点插入到表尾
scanf("%d",&x);
}
r->next=NULL;
return l;
}
void list_linklist(linklist A)
{
linklist p;
p=A->next;
while(p!=NULL)
{
printf("%d \n",p->data);
p=p->next;
}
// printf("/n");
}
linklist merg(linklist A ,linklist B)
{
linklist c;
Lnode *p,*q,*s,*r;
c = (Lnode*)malloc(sizeof(Lnode));
c->next=NULL;
p=A->next;
q=B->next;
// c=A;
r=c;
while(p&&q)
{
if(p->data<q->data)
{
s=p;
p=p->next;
}
else
{
s=q;
q=q->next;
}
r->next=s;
r=s; //从A,B表中选择较小的插入到C表中去
}
if(p==NULL)
{
p=q;
}
// r->next=q;
r->next = (q!=NULL? q:p);
return c;
}
void main()
{
linklist A,B,C;
printf("输入链表A的内容(从小到大输入):\n");
A=create_linklist();
printf("输入链表B的内容(从小到大输入):\n");
B=create_linklist();
printf("链表A为:\n");
list_linklist(A);
printf("链表B为:\n");
list_linklist(B);
C=merg(A,B);
printf("合并后的表为:\n");
list_linklist(C);
system("pause");
}
//编译不报错,功能却无法实现,请高手帮忙