解题思路:主要分为分成结构体定义,链表尾插遍历查找并删除链表元素和打印链表
注意事项:主要问题在于遍历查找删除链表元素,就是用指针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二级辅导-同因查找 (C++代码)(42的倍数,,所以直接递加42输出)浏览:1092 |
校门外的树 (C语言代码)浏览:1114 |
C语言程序设计教程(第三版)课后习题6.1 (C语言代码)浏览:625 |
汽水瓶 (C语言代码)浏览:698 |
简单的a+b (C语言代码)浏览:598 |
C语言程序设计教程(第三版)课后习题6.8 (C++代码)浏览:575 |
A+B for Input-Output Practice (VII) (C语言代码)浏览:522 |
杨辉三角 (C语言代码)浏览:484 |
永远的丰碑 (C语言代码)浏览:516 |
C语言程序设计教程(第三版)课后习题8.5 (C语言代码)浏览:659 |