题目描述,两个单链表按照增序排列,合并之后仍然为增序。
分析:这道题目相对来说比较简单,创建一个h指针,指向a的头结点,当a->data大于b->data时,h->next指向b,反之h->next指向a。最后结束的时候,如果a或者b其中一个不为空,则让h->next指向a或者b即可
typedef struct d{
int data
struct d *next
}node
node *Creat(int *a,int len)
{
node *head=(node *)malloc(sizeof(node))
head->data=NULL
node *ret=head
for(int i=0
{
node *s=(node *)malloc(sizeof(node))
s->data=a[i]
s->next=NULL
head->next=s
head=s
}
return ret
}
node *merge(node *a,node *b)
{
node *ret=a
node *q,*h
h=ret
a=a->next
q=b
b=b->next
free(q)
for(
{
if(a->data>b->data) //当a->data大于b->data时候,//h->next指向b,反之指向a
{
h->next=b
b=b->next
h=h->next
}else
{
h->next=a
a=a->next
h=h->next
}
}
h->next=NULL
if(a!=NULL)
{
h->next=a
}
if(b!=NULL)
{
h->next=b
}
return ret
}
void Print(node *h)
{
for(h=h->next
{
printf("%d->",h->data)
}
}
int main()
{
int a[]={1,3,5,7,9}
int b[]={2,4,6,8,10,12,14,16}
int len1=sizeof(a)/sizeof(a[0])
int len2=sizeof(b)/sizeof(b[0])
node *nodea=Creat(a,len1)
node *nodeb=Creat(b,len2)
node *ret=merge(nodea,nodeb)
Print(ret)
}