解题思路:一步一步来,先创建,然后删除,然后输出即可,别急
注意事项:注意代码中的指针的运用
参考代码:
#include <stdio.h>
#include <stdlib.h>
typedef struct student
{
int score;
struct student*next;
}Node,*node;
node create(int n);//创建链表
node delete_num(node head,int m);//删除链表中的元素
void output( node l );//输出链表
void main()
{
int n,m;
node head;//定义头指针
scanf("%d",&n);//输入链表元素个数
head=create(n);
scanf ("%d",&m);//输入需要删除的元素
delete_num( head, m);
output(head);
}
node create(int n)
{
node h;//定义头结点
h=(node)malloc(sizeof(Node));//创建头结点
h->next=NULL;//让头指针的指针域赋空
node q=h;//定义一个指针q,指向头结点
node p;//定义一个变化的指针p
int i;
for (i=0;i<n;i++)
{
p=(node)malloc(sizeof(Node));//为p开辟空间
scanf("%d",&(*p).score);//输入学生的得分
q->next=p;//让q指针指向p
q=p;//把p赋值给q,此时q就是p
q->next=NULL;//让q指针指向空,后插法
}
return(h);//返回头结点
}
node delete_num(node head,int m)
{
node p,q;
p=head->next;//定义指针p指向头结点
while (p->next)
{
if (p->score!=m)
{
while(p->score!=m&&p->next)//当p不等于m,且有下一个值
{
q=p;
p=p->next;//让p指针指向后一个值,实现p的变化
}
}
if (p->score==m)
{
q->next=p->next;//让q的next指向p的后一个,从而实现删除
free(p);//释放p,p值不存在了
}
p=q->next;//赋值新的p是q的next
}
return head;
}
void output(node l)
{
l=l->next;//指针l指向next
node q;////用于释放结点
while(l!=NULL)
{
printf("%d ",l->score);
q=l;
l=l->next;//跳跃到下一个
free(q);//释放,q不存在了
}
}
0.0分
5 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复