错误应该是在 max()函数或者 sort 函数里,是逻辑错误吗?请帮忙指出或帮忙改正一下

#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 <stdio.h>
#include <malloc.h>
#include <stdlib.h>


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/acceptedxukai/article/details/38942897
http://blog.csdn.net/cnm_1314/article/details/8042381

没看明白你这程序啥意思,max()函数和sort 函数都有错误:

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;
        }
        p=p->next; //这里应加上,否则死循环
    }
    return q;

}

sort函数:

void sort(node *L,node *L1)
{
    node *q;
        while((q = max(L1)) != NULL)//while是什么意思,这里死循环了
    {

        L->next = q;
        L = q;//上面都赋值了,这里又是什么意思?
    }
} 

我更新了代码,求你再帮我看一下