关于链表的删除有点问题想请教
#include<stdio.h>#include<stdlib.h>
#define LN sizeof(struct student)
struct student
{
int num;
int score;
struct student *next;
};
struct student *add(); //增加链表+填充内容
struct student *del(struct student *,int m); //删除节点
void print(struct student *head); //打印链表
int n;
int main()
{
struct student *stu;
int m;
stu = add();
print(stu);
printf("\nplease input the delete num:"); //没有读到这里,似乎出现了问题
scanf("%d",&m);
print(del(stu,m));
system("pause");
return 0;
}
struct student *add()
{
struct student *head;
struct student *p1,*p2;
p1 = p2 = (struct student *)malloc(LN);
printf("please input the num:");
scanf("%d",&p1->num);
printf("please input the score:");
scanf("%d",&p1->score);
head = NULL;
n = 0;
while(p1->num != 0)
{
n++;
if(n == 1)
{
head = p1;
}else
{
p2->next = p1;
}
p2 = p1;
p1 = (struct student *)malloc(LN);
printf("please input the num:");
scanf("%d",&p1->num);
printf("please input the score:");
scanf("%d",&p1->score);
}
return head;
}
struct student *del(struct student *head,int m)
{
struct student *p1,*p2;
p1 = head;
if(p1 == NULL)
{
printf("This is a NULL!!\n");
goto END;
}
while(p1->num != m && p1->next != NULL)
{
p2 = p1;
p1 = p1->next;
}
if(m == head->num)
{
head = p1->next;
}else
{
p2->next = p1->next;
}
printf("\nDelete %d number is succeful!",m);
n = n-1;
END:
return head;
}
void print(struct student *head)
{
struct student *p;
p = head;
printf("\n\n");
printf("There is %d records!",n);
printf("\n\n");
while(p->next != NULL)
{
printf("学号为:%d,分数是:%d\n",p->num,p->score);
p = p->next;
}
}
不知道为什么没有读到删除的那个部分 结构错了
*add() 不需要 *head
if()
p1->next = NULL;
else
p2->next = p2;
....
return p2; claws0n 发表于 2018-9-20 18:23
结构错了
*add() 不需要 *head
if()
这个是在*add里面的吗 czj1016130386 发表于 2018-9-20 18:45
这个是在*add里面的吗
对 里面修改 claws0n 发表于 2018-9-20 18:54
对 里面修改
你好,我刚刚试了很多次单步调试,都是在print函数里面的循环跳不出来,出现c0000005错误,应该不是结构上的问题吧 czj1016130386 发表于 2018-9-20 21:45
你好,我刚刚试了很多次单步调试,都是在print函数里面的循环跳不出来,出现c0000005错误,应该不是结构 ...
你的结构没有尾指针,所以死循环了 claws0n 发表于 2018-9-20 23:07
你的结构没有尾指针,所以死循环了
那不知道怎么改,我改了很多方法还是死循环 claws0n 发表于 2018-9-20 23:07
你的结构没有尾指针,所以死循环了
我懂了谢谢 czj1016130386 发表于 2018-9-21 11:54
我懂了谢谢
嗯,懂就好,按照 2 楼的提示修改。不好意思,电脑出了一些问题,那时不能发代码~ 你的代码的问题
p1 = (struct student *)malloc(LN);
head = NULL;
n = 0;
while(p1->num != 0)
{
n++;
if(n == 1)
{
head = p1; //原本是空指针的 head突然变成 p1, 之后就没有再也没有看到 NULL 了。之后的遍历就一直找不到 NULL,无法停止
}else
{
p2->next = p1;
}
p2 = p1;
p1 = (struct student *)malloc(LN);
}
return head; // head 是你第一个节点而已,思考以下~
页:
[1]