谁能跟我解释一下为什么输出的是最大值,我是想让他排序的

#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);
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,*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 = (node
)malloc(sizeof(node));
k = L;
k->next = NULL;
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);

//sort(L,L1);

print(sort(L,L1));


system("pause");

}

#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,*q = NULL;

int max = p->next->num;
while((p->next )!= NULL)
{
    if(max < (p->next->num))
    {
        max = p->next->num;

        q=p->next;

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

        q->next=L->next;
        L->next=q;                  
    }
    else 
        p = p->next;
}
return L;

}

node* sort(node *L,node *L1)
{
node *q,*k=NULL,*res=NULL;

while((q = max(L1)) != NULL)
{
    k = (node *)malloc(sizeof(node));
    k->num=q->next->num;
    k->score=q->next->score;
    k->next=NULL;
    if (res==NULL)
    {
        res=k;
    }
    else
    {
        node *ss=res;
        while (ss->next!=NULL)
        {
            ss=ss->next;
        }
        ss->next=k;
    }

    if (L1->next->next!=NULL)
    {
        L1->next=L1->next->next;
    }
    else
        break;      

}
return res;

}

void print(node *L)
{
node *p = L;
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(L,L1));

system("pause");

}

http://blog.csdn.net/guoyong10721073/article/details/9108773

你需要将你的**比较后的结果循环输出**,不循环的话只输出比较后的第一个值或者最后一个值