c语言删除结点,C语言在链表中删除结点
/****************************************************************
该程序实现结点的删除。
其中void *del_node(TYM *head,int pos,int len)函数用于删除结
点,head为需要删除结点的链表、pos为结点的位置、len为需要删除
的长度。
****************************************************************/
#include
#include
typedef struct stu //定义TYM类型
{
char name[20];
int num;
struct stu *next;
}TYM;
void *del_node(TYM *head,int pos,int len) //删除结点指针函数
{
int i;
TYM *p,*q;
if(pos==1) //如果删除的位置是首地址
{
for(i=0;i
{
p = head; //使p指向head
head = head->next; //使head指向下一个结点
free(p); //释放p指向的结点
}
}
else
{
for(p=head,i=1;i
{
p = p->next; //使p指向下一个结点,直到第pos个结点为止
}
for(i=0;i
{
q = p->next; //使q指向p的下一个结点
p->next = q->next; //将q的下一个结点的地址传给p的next
free(q); //释放q指向的结点
}
}
return head; //返回首地址
}
void freeall(TYM *head) //释放函数
{
TYM *p;
for(p=head;p!=NULL;) //释放结点直到所有结点被释放
{
p = head->next; //使p指向下一个结点
free(head); //释放当前结点
head = p; //使head指向下一个结点
}
if(p==NULL) //如果全部释放
printf("********* Free Success! *********\n");
}
int main()
{
TYM *head,*p,*q;
int i,pos;
head = p = (TYM *)malloc(sizeof(TYM)); //开辟一个新的空间
printf("*********************************\n");
printf("Please Input :\n");
scanf("%s%d",head->name,&head->num); //对新空间赋值
for(i=0;i<4;i++) //创建4个空间
{
q = (TYM*)calloc(1,sizeof(TYM)); //将开辟的空间的首地址赋给q
p->next = q; //将q的值传递给p的next成员
p = q; //使p指向q
scanf("%s%d",p->name,&p->num); //对新空间赋值
p->next = NULL; //使空间的next成员不指向任何方向
}
printf("************ Output *************\n");
for(p=head;p!=NULL;p=p->next) //输出链表
{
printf("%s\t%d\n",p->name,p->num); //输出当前变量的值
}
printf("DELETE......\n");
printf("******** Position & Lenth *******\n");
printf("Position:\t");
scanf("%d",&pos); //输入删除结点的地址
printf("Lenth:\t\t");
scanf("%d",&i); //输入删除结点的个数
head = del_node(head,pos,i);
printf("********** Output all ***********\n");
for(p=head;p!=NULL;p=p->next) //输出经删除后的链表
{
printf("%s\t%d\n",p->name,p->num); //输出当前变量的值
}
freeall(head); //释放链表
return 0;
}
****************************************调试窗口****************************************
c语言删除结点,C语言在链表中删除结点相关推荐
- C语言从已排序的链表中删除重复项(附完整源码)
C语言从已排序的链表中删除重复项 C语言从已排序的链表中删除重复项完整源码(定义,实现,main函数测试) C语言从已排序的链表中删除重复项完整源码(定义,实现,main函数测试) #include ...
- c语言单链表删除倒数第k个数,在单链表中删除倒数第k个节点
实现方式很多,在这里只说两种实现方式.看不懂时候,大家可以画画图,对理解为什么很有帮助. 第一种方式: 1.首先判断K值和链表是否为空,如果k<=0,或链表为空,直接返回head: 2.满足上面 ...
- 无头结点单链表的逆置_从无头单链表中删除节点及单链表的逆置
题目: 假设有一个没有头指针的单链表.一个指针指向此单链表中间的一个节点(非第一个节点, 也非最后一个节点).请将该节点从单链表中删除. 解答: 典型的"狸猫换太子", 若要删除该 ...
- 每日一题——leetcode237 删除链表中的结点
1 题目 237. 删除链表中的节点 难度简单 请编写一个函数,用于 删除单链表中某个特定节点 .在设计函数时需要注意,你无法访问链表的头节点 head ,只能直接访问 要被删除的节点 . 题目数据保 ...
- 6-4 学生成绩链表处理 (20分) 本题要求实现两个函数,一个将输入的学生成绩组织成单向链表;另一个将成绩低于某分数线的学生结点从链表中删除。 函数接口定义: ```cpp struct stu
6-4 学生成绩链表处理 (20分) 本题要求实现两个函数,一个将输入的学生成绩组织成单向链表:另一个将成绩低于某分数线的学生结点从链表中删除. 函数接口定义: struct stud_node *c ...
- 带哨兵节点的链_关于链表中哨兵结点问题的深入剖析
算法 数据结构 关于链表中哨兵结点问题的深入剖析 最近正在学习UC Berkeley的CS61B这门课,主要是采用Java语言去实现一些数据结构以及运用数据结构去做一些project.这门课不仅告诉你 ...
- python链表中删除一个节点数据_python实现单链表中删除倒数第K个节点的方法
本文实例为大家分享了python实现单链表中删除倒数第K个节点的具体代码,供大家参考,具体内容如下 题目: 给定一个链表,删除其中倒数第k个节点. 代码: class LinkedListAlgori ...
- 建立一个链表,每个结点包括:学号、姓名、性别、年龄。输入一个年龄,如果链表中的结点所包含的年龄等于此年龄,则将此结点删去。(自己编程)
建立一个链表,每个结点包括:学号.姓名.性别.年龄.输入一个年龄,如果链表中的结点所包含的年龄等于此年龄,则将此结点删去.最近接触到了链表的编程学习,遇到这样的比较基础的编程,程序表现大致分为几个步骤 ...
- 《程序员代码面试指南》第二章 链表问题 在单链表和双链表中删除倒数第K个节点...
题目 在单链表和双链表中删除倒数第K个节点 java代码 /*** @Description:在单链表和双链表中删除倒数第K个节点* @Author: lizhouwei* @CreateDate: ...
- 从无头单链表中删除节点 结构之法 4
题目: 假设有一个没有头指针的单链表.一个指针指向此单链表中间的一个节点(不是第一个,也不是最后一个节点),请将该节点从单链表中删除. 分析与解答: 假设给定的指针为pCurrent,Node *pN ...
最新文章
- Linux学习之系统编程篇:信号量(sem_init / wait / trywait / post / destroy)
- boost::math::owens_t用法的测试程序
- ubuntu 12.04 php mysql_Ubuntu 12.04下LAMP安装配置
- node.js小案例_留言板
- 电脑记时----千年虫
- Java-n个人报数
- java中两任务并行运行_Java并行编程中的“可调用”与“可运行”任务
- 电脑密码忘记怎么办??
- 安全彻底的卸载工具App Cleaner Uninstaller for Mac
- [转载]Badboy使用教程
- 单片机12864带字库汇编使用教程
- vue引入自定义字体otf、ttf字体的方法
- UBuntu安装配置记录
- 计算机一级证件照尺寸,照相馆不会告诉你的哪些事:常用证件照尺寸汇总
- DeepFace: Closing the Gap to Human-Level Performance in Face Verification
- CLH lock queue的原理解释及Java实现
- Salesforce触发器面试题
- 新奥股份2019年经营性现金流和主营业务收入稳健增长
- Chinfa DRA480-24A
- 中国商业油库及码头行业运行动态分析及投资规划建议研究报告2022年版