解题思路:主要分为分成结构体定义,链表尾插遍历查找并删除链表元素和打印链表
注意事项:主要问题在于遍历查找删除链表元素,就是用指针s来记录L的上一个位置,L来遍历,L往后跳一格,如果没查到s就瞬移到L,然后L再往后跳一格,要是查到了,L就往回跳一格就是s,然后L的next直接指向后面的后面,实现断链,s就不变
参考代码:#include <stdio.h>
#include <stdlib.h>
typedef int ElemType;
//定义结构体
typedef struct LNode{
ElemType data;
LNode*next;
}LNode,*LinkList;
//尾插法
void list_insert_tail(LinkList &L,int i)
{
L=(LinkList)malloc(sizeof(LNode));
ElemType x;
L->next=NULL;
LinkList s,r=L;
if(i<1){
return;
}
for(int j=0;j<i;j++)
{
scanf("%d",&x);
s=(LinkList)malloc(sizeof(LNode));
s->data=x;
r->next=s;
r=s;
}
r->next=NULL;
}
//按值查找删除
void list_search_delete(LinkList L,ElemType del)
{
if(!L){
printf("false\n");
return;
}
//利用L遍历寻找如果找到了,用s来存储L的上一个位置,然后L回到s再一次进两步
LinkList s;
s=L;
L=L->next;
while(L)
{
if(L->data==del)
{
L=s;
L->next=L->next->next;
} else{
s=L;
L=L->next;
}
}
}
//打印链表
void print_list(LinkList L)
{
if(!L){
printf("false\n");
return;
}
L=L->next;
while (L)
{
printf("%d ",L->data);
L=L->next;
}
printf("\n");
}
int main() {
int i;
scanf("%d",&i);
LinkList L;
list_insert_tail(L,i);
ElemType del;
scanf("%d",&del);
list_search_delete(L,del);
print_list(L);
return 0;
}
0.0分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复