链表元素的删除
Posted dopeboy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了链表元素的删除相关的知识,希望对你有一定的参考价值。
需要判断要删除元素在链表中的位置(重要)
//用链表的结构建立一条公交线路的站点信息,从键盘依次输入从起点到终点的各站站名,以单个“#”字符作为输入结束,统计站的数量并输出这些站点
#include<stdio.h>
#include<stdlib.h> //malloc所需头文件
#include<string.h> //memset所需头文件
struct station{
char name[20];
struct station *nextPtr;
};
struct station *create(struct station *p);
void print_station(struct station *p);
struct station *del_station(struct station *p);
int main()
{
struct station *head;
// head =null;null空指针必须大写。。。。。。
head=NULL;
head=create(head);
print_station(head);
head=del_station(head);
print_station(head);
return 0;
}
struct station *create(struct station *p){
struct station *p1,*p2;
p1=p2=(struct station *)malloc(sizeof(struct station));
if(p2){
printf("请输入站名,以单个“#”作为结束标志:
");
scanf("%s",p2->name);
p2->nextPtr=NULL;
p=p2;
}
while(p2->name[0]!=‘#‘){
p1=p2;
p2=(struct station *)malloc(sizeof(struct station));
scanf("%s",p2->name);
p2->nextPtr=NULL;
p1->nextPtr=p2;
}
printf("输入完毕!
");
return p;
}
void print_station(struct station *p){
int count=0;
if(!p){
printf("站名链表为空!");
}
else{
while(p){
count++;
printf("站名:%s
",p->name);
p=p->nextPtr;
}
printf("总站数:%d
",count-1);
}
}
struct station *del_station(struct station *p){
char a[20]="";
struct station *p1,*p2;
p1=p;
printf("请输入要删除的站名:
");
scanf("%s",a);
if(!p){
printf("此链表为空表!
");
return p;
}
if(strcmp(a,p1->name)==0){//需要删除的元素是链表的头部
printf("删除节点操作完成!
");
return p1->nextPtr;
}else{
while((strcmp(a,p1->name)!=0)){
p2=p1;
p1=p1->nextPtr;
if(!p1){
printf("没有此站点!
");
return p;
}
}
if(p1->nextPtr!=NULL){//需要删除的元素是链表的中部
p2->nextPtr=p1->nextPtr;
free(p1);
p1=NULL;
printf("删除节点操作完成!
");
return p;
}
else{//需要删除的元素是链表的最后一个元素
p2->nextPtr=NULL;
free(p1);
p1=NULL;
printf("删除节点操作完成!
");
return p;
}
}
}
以上是关于链表元素的删除的主要内容,如果未能解决你的问题,请参考以下文章