```c
#include <stdlib.h>
typedef int DataType ;
typedef struct LNODE
{
DataType data;/*data数据项用于存放结点的数据值*/
struct LNODE *next; /*next数据项存放下一个结点的指针*/
}LNODE;
LNODE* initl()
{
LNODE *head;
head=(LNODE*)malloc(sizeof(LNODE)); /*为头结点申请空间*/
if(head!=NULL) /*将头结点的指针域初始化为NULL*/
head->next=NULL;
return (head);
}
LNODE* creatL1()/*建立一个头为head的带头结点的单链表*/
{
LNODE *head,*p,*s;
DataType x;
head=initl(); /*链表初始化*/
p=head;
scanf("%d",&x);
while(x!=-1)
{
s=(LNODE*)malloc(sizeof(LNODE)); /*申请新结点空间*/
s->data=x; /*给新结点的数据域赋值*/
s->next=NULL; /*将新结点的指针域初始化为空*/
p->next=s; /*将新结点链接到表尾*/
p=s; /*新结点成为新链表的尾结点*/
scanf("%d",&x);
}
return head;
}
void output(LNODE *head) /*输出节点数据*/
{
LNODE *p;
p=head->next;
while(p!=NULL)
{
printf("%d ",p->data);
p=p->next;
}
}
/*以下函数完成升序合并两上单链表*/
void Ascendingmerge(LNODE *head1,LNODE *head2,LNODE *head3)
{LNODE *p;
LNODE *q;
LNODE *k;
k=head3;
p=head1->next;
q=head2->next;
while(p!=NULL&&q!=NULL)
{
if(p->data<q->data)
{k->next=p;
p=p->next;
}
else
{
k->next=q;
q=q->next;
}
k=k->next;
}
if(p!=NULL)
{ k->next=p;
}
if(q!=NULL)
{
k->next=q;
}
k->next=NULL;
}
int main()
{
LNODE *head1,*head2,*head3;
head3=(LNODE*)malloc(sizeof(LNODE));
head3->next=NULL;
head1=creatL1();
head2=creatL1();
Ascendingmerge(head1,head2,head3);
printf("合并后的数据为:\n");
output(head3);
return 0;
}