满意答案
//---------------------------------------------------------------------------
#include
#include
typedef struct node{
int d;
struct node *next;
} node,list;
list *merge(list *a,list *b) /*合并链表*/
{
list *rt=NULL,*now=NULL,*nc=NULL;
while (a&&b)
{
if (a->d>=b->d) {
nc=a;
a=a->next;
}
else {
nc=b;
b=b->next;
}
if (rt) {
now->next=nc;
now=now->next;
}
else rt=now=nc;
}
if (a) now->next=a;
else now->next=b;
return rt;
}
list *reverse(list **lp) /*反转列表*/
{
list *f=*lp,*m=NULL,*l=NULL;
while (f)
{
m=f->next ;
f->next=l;
l=f;
f=m;
}
return *lp=l;
}
list *insert(list *a,int c)
{
node *b=NULL;
if (a) {
a->next=insert(a->next,c);
b=a;
}
else {
b=malloc(sizeof(node));
b->d=c;
b->next=NULL;
}
return b;
}
void prt(list *p)
{
while (p) {
printf("%d ",p->d);
p=p->next;
}
}
int main(void)
{
list *a=NULL, *b=NULL;
int i;
for (i = 10; i>0; i-=2) {
a=insert(a,i);
b=insert(b,i-1);
}
printf("A:\t");
prt(a);
printf("\nB:\t");
prt(b);
a=reverse((a=merge(a,b),&a));
printf("\nA+B:\t");
prt(a);
return 0;
}
//---------------------------------------------------------------------------
00分享举报