合并有序数组(链表基础)
#include <stdio.h>
#include <stdlib.h>
typedef struct node
{
int data;
struct node *next;
}LNode,*LinkList;
void MergeLink(LinkList *L1,LinkList *L2)
{
LinkList p,q,mmm,L3,s;
L3=(LinkList)malloc(sizeof(LNode));
mmm=L3;
mmm->next=NULL;
p=*L1,q=*L2;
while(p->next&&q->next) //while(p->next&&q->next)
{ //{
if(p->next->data<=q->next->data) // if(p->next->data<=q->next->data)
{ //{
s=(LinkList)malloc(sizeof(LNode)); //www->next=p->next;
s->data=p->next->data; //www=p->next;
mmm->next=s; //p=p->next;
mmm=s; //}
p=p->next; //else 错误解法,www由p转向指q会将p也指向q,失败
}
else //{
{ //www->next=q->next;
s=(LinkList)malloc(sizeof(LNode)); //www=q->next;
s->data=q->next->data; //q=q->next;
mmm->next=s; //}
mmm=s; //}
q=q->next;
}
}
mmm->next=p->next?p->next:q->next;
// mmm->next=NULL; 自己构的表都要在末尾加NUUL,就想自己建的字符数组要加'\0'一样,这里不用
LinkList head=L3;
while(head->next)
{
printf("%d\n",head->next->data);
head=head->next;
}
return ;
}
void CreateLink(LinkList *L,int n)
{
*L=(LinkList)malloc(sizeof(LNode));
LinkList p=*L;
p->next=NULL;
LinkList s;
int i;
for(i=0;i<n;i++)
{
s=(LinkList)malloc(sizeof(LNode));
scanf("%d",&(s->data));
p->next=s;
p=s;
}
p->next=NULL;
return;
}
int main()
{
int m,n;
LinkList a,b;
scanf("%d",&m);
CreateLink(&a,m);
scanf("%d",&n);
CreateLink(&b,n);
MergeLink(&a,&b);
return 0;
}