请大家帮忙看一下我这个结果为什么没有排序啊?

#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);
    end->next = newp;
    end = newp;

}
end->next = NULL;
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,*s = NULL;int m;
node *q = (node
)malloc(sizeof(node));
q->next = NULL;
if(p->next != NULL)
return NULL;
else {
m = p->next->num;
q->next = p->next;
while((p->next )!= NULL)
{
if(m < (p->next->num))
{
m = p->next->num;
q->next =p->next;
s->next = p->next;
}

    p = p->next;
}
if(s->next != NULL)
{
     s->next=s->next->next; 
}


return q;

}
}

node* sort(node L)
{
node *s = (node
)malloc(sizeof(node));
s->next = NULL;
node *q,*p = s;
while(q = max(L))
{
p->next = q;
p = 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(sort(L1));

system("pause");

}

看不懂,操作链表我一般用的是头结点,游标,当前节点组合;不能排序你看看是因为传值调用还是传地址调用,再有就是变量的作用域的问题,这几点搞定了,代码逻辑就清晰多了

回答你很多次了,参考:http://blog.csdn.net/guoyong10721073/article/details/9009625

http://blog.csdn.net/lpp0900320123/article/details/20356143

用心看就会懂了。。。