#include<stdio.h>
#include<stdlib.h>
typedef struct Node{
int data;
Node *next;
} Linklist;
void print(Linklist linklist);
//头插法建立单链表 ,有头结点
Node *CreateList_head()
{
Node *head,*p;
int n=0;
head=NULL;
printf("输入数据,以-1结束:\n");
while(scanf("%d",&n)&&n!=-1)
{
p=(Node*)malloc(sizeof(Node));
p->data=n;
p->next=head;
head=p;
}
return head;
}
//尾插法建立单链表
Linklist *CreateList_end()
{
Node *head,*p,*q;
int n;
head=NULL;
printf("输入数据,以-1结束:\n");
while(scanf("%d",&n)&&n!=-1)
{
p=(Node*)malloc(sizeof(Node));
p->data=n;
if(head==NULL)
{
head=p;
}
else{
q->next=p;
}
q=p;
}
q->next=NULL;
return head;
}
//单链表就地逆置
Linklist *Reverse(Linklist &l)
{
Linklist *r,*p;
p=l.next;
l.next=NULL;
while(p!=NULL)
{
r=p->next;
p->next=l.next;
l.next=p;
p=r;
}
return &l;
}
//打印链表
void print(Linklist linklist)
{
Node *q;
printf("数据为:");
q=linklist.next;
while(q!=NULL)
{
printf("%d ",q->data);
q=q->next;
}
printf("\n");
return ;
}
//两个递增链表按递减序列合并,并保存在其中一个链表
void MergeList(Linklist &La,Linklist &Lb)
{
Node *la=La.next,*lb=Lb.next,*p;
La.next=NULL;//结果保存在链表La中
while(la&&lb)
{
int a=la->data;
int b=lb->data;
if(a<=b)//头插法建立递减链表
{
p=la->next;
la->next=La.next;
La.next=la;
la=p;
}
else
{
p=lb->next;
lb->next=La.next;
La.next=lb;
lb=p;
}
print(La);
}
if(lb) la=lb;//未合并的继续合并
while(la)
{
p=la->next;
la->next=La.next;
La.next=la;
la=p;
}
}
int main()
{
// freopen("input.txt","r",stdin);//从文件中读取输入数据
// freopen("output.txt","w",stdout);//结果输出到文件中
Linklist linklist,La,Lb;
/*头插法 */
// linklist.next=CreateList_head();
// print(linklist);
/*尾插法*/
//linklist=CreateList_end();
/*就地逆置 */
// Reverse(linklist);
// print(linklist);
/*合并*/
La.next=CreateList_end();
Lb.next=CreateList_end();
MergeList(La,Lb);
print(La);
}
运行结果: