合并两个链表并且按学号的升序打印出来解决方法

合并两个链表并且按学号的升序打印出来
#include<stdio.h>
#include<stdlib.h>

struct student{
int xuehao;
struct student *next;
};
void disp(struct student *head)
{
struct student *p=head->next;
while(p!=NULL)
{
printf("%d ",p->xuehao);
p=p->next;
}
}

struct student * build(){
struct student *head,*pnew,*t;
int i,k=0;
head=(struct student*)malloc(sizeof(struct student));
head->next=NULL;
t=head;
if(head==NULL)
return NULL;
while(1)
{
pnew=(struct student*)malloc(sizeof(struct student));
printf("input xuehao");
scanf("%d",&i);
if(i==-1) break;
pnew->xuehao=i;
pnew->next=t->next;
t->next=pnew;
t=pnew;
}
return head;
}

void px(struct student *head)
{
struct student *p=head->next,*t,*q;
int k;
for(;p!=NULL;p=p->next)
{
t=p;

for(q=t->next;q!=NULL;q=q->next)
{
if(t->xuehao>q->xuehao)
t=q;
}
if(t!=p)
{
k=p->xuehao;
p->xuehao=t->xuehao;
t->xuehao=k;
}
}
}
void lj(struct student *heada,struct student *headb)
{
struct student *pa=heada->next,*pb=headb->next,*t,*q;
while(pb!=NULL)
{

if(pa->xuehao < pb->xuehao&&pa->next!=NULL)
{
while(pa->next->xuehao < pb->xuehao)
{
pa=pa->next;
}
t=pb;
while(pa->xuehao > pb->next->xuehao&&pb->next!=NULL)
{
pb=pb->next;
}
pb->next=pa->next;
pa->next=t;
}
if(pa->xuehao > pb->xuehao&&pa!=NULL)
{
t=pb;

while(pb->next->xuehao < pa->xuehao&&pb->next!=NULL)
{
pb=pb->next;
}

pb->next=pa->next;
pa->next=t;
}
pb=pb->next;
pa=pa->next;
}
}











void main()
{
struct student *heada,*headb;
printf("input a 链表\n");
heada=build();
px(heada);
printf("a 链表 排序为");
disp(heada);

printf("\n\n");
printf("input b 链表\n");
headb=build();
px(headb);
printf("b 链表 排序为\n");
disp(headb);
printf("\n\n");
lj(heada,headb);
printf("合并的链表===");
disp(heada);

}




------解决方案--------------------
if (pa->xuehao < pb->xuehao && pa->next != NULL) {
while (pa->next->xuehao < pb->xuehao) {
pa = pa->next;
}
t = pb;
while (pa->xuehao > pb->next->xuehao && pb->next != NULL) {
pb = pb->next;
}
pb->next = pa->next;
pa->next = t;
}



这个地方有问题,应该是如果A列表的元素a[i+1]的学号大于b[j]的学号那么先吧a[i+1]保存到t,吧a[i]的next指向b[j],然后再下移b的指针,直到b[z+1]的学号大于t的学号,再把b[z]的next指向t,吧t指向b[z+1]
再重复a的操作才对
你上面的好像不对吧