失败案例 链表创立输入零无反应,未知原因!!
//已有a,b两个链表,
#include <stdio.h>
#include <stdlib.h>
#define LEN sizeof(struct student)
struct student
{
long num;
int score;
struct student *next;
};
struct student lista, listb;
int n, sum = 0;
int main()
{
struct student *creat(void);
struct student *insert(struct student *, struct student *);
void print(struct student *);
struct student *ahead, *bhead, *abh;
printf("input list a:\n");
ahead = creat();
sum = sum + n;
printf("input list b:\n");
bhead = creat();
sum = sum + n;
abh = insert(ahead, bhead);
print(abh);
return 0;
}
struct student *creat(void) //创建链表函数,返回一个student结构链表的头指针
{
struct student *p1,*p2,*head;
n = 0;
p1 = p2 = (struct student *)malloc(LEN);
printf("input number and score of student:\n");
printf("if number is 0,stop input .\n");
scanf("%ld%d", &p1->num, &p1->score);
head = NULL;
while (p1->num != 0)
{
n = n + 1;
if (n == 1)
{
head = p1;
}
else
{
p2->next = p1;
}
p2 = p1;
p1 = (struct student *)malloc(LEN);
scanf("%ld%d", &p1->num, &p1->score);
}
p2->next = NULL;
return(head);
}
struct student *insert(struct student *ah, struct student *bh) //连接函数,返回一个连接后的链表
{
struct student *pa1,*pa2, temp;
pa1 = ah;
while (pa1 != NULL)
{
if (pa1->next == NULL)
break;
pa1 = pa1->next;
}
pa1 = bh; //将b的头连接到a的尾部。
//重新指到头进行排序。
for (pa1 = ah; pa1 != NULL; pa1 = pa1->next)
{
for (pa2 = ah->next; pa2 != NULL; pa2 = pa2->next)
{
if (pa1->num > pa2->num)
{
temp.num= pa1->num;
pa1->num = pa2->num;
pa2->num = temp.num;
temp.score = pa1->score;
pa1->score = pa2->score;
pa2->score = temp.score;
}
}
}
}
void print(struct student *head) //输出函数
{
struct student * p;
p = head;
while (p->next!= NULL)
{
printf("%ld %d \n", p->num, p->score);
p = p->next;
}
}