C语言链表删除结点:mydel函数实现
C语言链表删除结点:mydel函数实现
本文将介绍如何使用C语言实现一个名为mydel的函数,用于从一个无头结点的链表中删除指定name域的结点。函数接收链表的头指针和目标name值,并返回删除后的链表头指针。
1. 链表结构定义
首先,定义一个简单的链表结构,包含name、no和指向下一个结点的指针next:
struct stu{
char name[20];
int no;
struct stu *next;
};
2. 函数接口定义
函数mydel的接口定义如下:
struct stu * mydel(struct stu *head,char *name);
其中:
head: 已经创建好的无头结点的链表的头指针。name: 最大为19个字符的字符串,用于标识要删除的结点的name域。
3. 函数实现
函数mydel的实现代码如下:
struct stu * mydel(struct stu *head,char *name){
struct stu *p,*q;
p=head;
if(strcmp(p->name,name)==0){ //头结点就是需要删除的节点
head=head->next;
free(p);
return head;
}
while(p->next!=NULL&&strcmp(p->next->name,name)!=0){ //查找需要删除的节点
p=p->next;
}
if(p->next==NULL){ //没找到
printf('no found\n');
return head;
}
q=p->next; //找到了要删除的节点
p->next=q->next;
free(q);
return head;
}
4. 函数测试
为了测试mydel函数,可以编写一个主函数main,并调用create函数创建一个包含10个结点的链表。然后,从用户输入中获取一个name值,并调用mydel函数删除对应name的结点。最后,使用show函数遍历并输出删除后的链表。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct stu{
char name[20];
int no;
struct stu *next;
};
struct stu * create();
struct stu * mydel(struct stu *head,char *name);
void show(struct stu *p){
while(p){
printf('%s %d\n',p->name,p->no);
p=p->next;
}
}
int main(){
char name[20];
struct stu *p=NULL;
gets(name);
p=create();
p=mydel(p,name);
show(p);
return 0;
}
struct stu * create(){
struct stu *p,*h=NULL,*q;
char name[10][20]={'liming','maming','zhaoming','yaoming','xiaming','lixiaoming',
'zhangming','nieming','zhouming','hanming'};
int i=0;
while(i<10){
p=(struct stu*)malloc(sizeof(struct stu));
strcpy(p->name,name[i]);
p->no=i;
if(h==NULL){
h=p;
q=p;
}
else{
q->next=p;
q=p;
}
i++;
}
q->next=NULL;
return h;
}
/* 请在这里填写答案 */
5. 测试用例
- 输入样例:
输出样例:limingmaming 1 zhaoming 2 yaoming 3 xiaming 4 lixiaoming 5 zhangming 6 nieming 7 zhouming 8 hanming 9 - 输入样例:
输出样例:zzzmingno found liming 0 maming 1 zhaoming 2 yaoming 3 xiaming 4 lixiaoming 5 zhangming 6 nieming 7 zhouming 8 hanming 9
6. 代码解释
- 函数
mydel首先检查头结点的name域是否与输入的name值相同。如果相同,则将头指针指向下一个结点,并释放头结点空间。 - 如果头结点不是要删除的结点,则从第二个结点开始遍历链表,直到找到目标结点或遍历到链表末尾。
- 如果找到目标结点,则将目标结点的前一个结点的
next指针指向目标结点的下一个结点,并释放目标结点空间。 - 如果没有找到目标结点,则输出“no found”并返回头指针。
总结
本文介绍了如何在C语言中实现一个删除链表结点的函数mydel,以及如何进行测试。该函数可以有效地删除链表中指定的结点,并返回删除后的链表头指针。
原文地址: https://www.cveoy.top/t/topic/nydm 著作权归作者所有。请勿转载和采集!