合并有序数组(由大到小)(链表基础)
#include <stdio.h>
#include <stdlib.h>
typedef struct node
{
int data;
struct node *next;
}LNode,*LinkList;
void CreateLink(LinkList *L,int n)
{
int i;
LinkList p,s;
*L=(LinkList)malloc(sizeof(LNode));//这一步一定接着写啊
p=*L;
p->next=NULL;
for(i=0;i<n;i++)
{
s=(LinkList)malloc(sizeof(LNode));
scanf("%d",&(s->data));
s->next=p->next;
p->next=s; //结果由大到小排序,只要在创造链表的时候由大到小排列即可
}
return;
}
void MergeList(LinkList *L1,LinkList *L2)
{
LinkList p,q,L3,s,mmm;
p=*L1;
q=*L2;
L3=(LinkList)malloc(sizeof(LNode));
mmm=L3;
mmm->next=NULL; //这三步,标准步骤
while(p->next&&q->next)
{
if(p->next->data>q->next->data)
{
s=(LinkList)malloc(sizeof(LNode));
s->data=p->next->data;
mmm->next=s;
mmm=s;
p=p->next;
}
else
{
s=(LinkList)malloc(sizeof(LNode)); //创建新的地址,原有地址不会被删除
s->data=q->next->data;
mmm->next=s;
mmm=s;
q=q->next;
}
}
mmm->next=p->next?p->next:q->next;
LinkList head;
head=L3;
while(head->next)
{
if(head->next->next==NULL)
printf("%d\n",head->next->data);
else
printf("%d ",head->next->data);
head=head->next;//这个也记着写啊
}
return ;
}
int main()
{
int n,m;
scanf("%d%d",&n,&m);
LinkList a,b;
CreateLink(&a,n);
CreateLink(&b,m);
MergeList(&a,&b);
return 0;
}