将两个链表合并后排序,代码编译没错,可是运行结果不对

#include
#include
#include
#include

typedef struct Student
{
int num;
float score;
struct Student *next;
}node;

node* create()
{
int n;
printf("please input n:\n");
scanf("%d",&n);
node L,*newp,*end;
L = (node
)malloc(sizeof(node));
L->next = NULL;
end = L;

for(int i = 0;i < n;i++)
{
newp = (node*)malloc(sizeof(node));
scanf("%d %f",&newp->num,&newp->score);
newp->next = NULL;
end->next = newp;
end = newp;
}
return L;
}

void combine(node* L1,node* L2)
{
node *p1,*p2;
p1 = L1->next;
p2 = L2;
while(p1->next!=NULL)
{
p1 = p1->next;
}
p1->next = p2->next;

}

node* max(node *L)
{
node *p = L,*q = NULL;
int max = p->next->num;
while((p->next )!= NULL)
{
if(max < (p->next->num))
{
max = p->next->num;
q = p->next;
q->next = NULL;
p->next = p->next->next;
}
else p = p->next;
}
return q;

}

node* sort(node *L,node *L1)
{
node *q,*k;
k = L;
while((q = max(L1)) != NULL)
{

    k->next = q;
    k = q;
}
return L;

}

void print(node *L)
{
node *p = L->next;
while(p!= NULL)
{
printf("%d %f \n",p->num,p->score);
p = p->next;
}
}

void main()
{
node L1,*L2;
node *L = (node
)malloc(sizeof(node));
L->next = NULL;
L1 = create();
L2 = create();
combine(L1,L2);
print(L1);
print(sort(L,L1));

system("pause");

}

https://zhidao.baidu.com/question/2269630784278069788.html