#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;//上面都赋值了,这里又是什么意思?
}
}
我更新了代码,求你再帮我看一下