有序单链表合并(原结点) 有个问题,请高手指教!
#include<stdlib.h>#include<stdio.h>
#define ST struct a
ST //声明结构体
{ int num;
ST *next;
};
ST *ceart() //创建链表
{ ST *head,*p1,*p2;
int n=0;
p1=p2=(ST *)malloc(sizeof(ST));
printf("input is:\n");
scanf("%d",&p1->num);
while(p1->num!=0)
{ n++;
if( n==1) head=p1;
else p2->next=p1;
p2=p1;
p1=(ST *)malloc(sizeof(ST));
scanf("%d",&p1->num);
}
p2->next=NULL;
free(p1);
return head;
}
ST *print(ST *h) //输出
{
while(h!=NULL)
{
printf("%d ",h->num);
h=h->next;
}
}
ST *link(ST *L1,ST *L2) //合并链表
{ ST *p1,*p2,*p3,*head;
head=p3=L1;
p1=L1->next;
p2=L2->next;
while(p1&&p2)
{ if(p1->num<=p2->num)
{ p3->next=p1; p3=p1; p1=p1->next; }
else
{ p3->next=p2; p3=p2; p2=p2->next; }
}
p3->next=p1?p1:p2;
return head;
}
main()
{ ST *h1,*h2,*head; clrscr();
h1=ceart();
h2=ceart();
head=link(h1,h2);
print(head);
}
我是按书上分析写的,但这个存在一个问题:
两个表合并之后,第二个表(L2所指)的第一个结点的数据合并不上去.
例如: 输入: 5 9 14 0
输入: 6 11 16 0
输出:5 9 11 14 16
不知道哪个位置有问题,请高手赐教!.