/****************************************************************

该程序实现结点的删除。

其中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语言在链表中删除结点相关推荐

  1. C语言从已排序的链表中删除重复项(附完整源码)

    C语言从已排序的链表中删除重复项 C语言从已排序的链表中删除重复项完整源码(定义,实现,main函数测试) C语言从已排序的链表中删除重复项完整源码(定义,实现,main函数测试) #include ...

  2. c语言单链表删除倒数第k个数,在单链表中删除倒数第k个节点

    实现方式很多,在这里只说两种实现方式.看不懂时候,大家可以画画图,对理解为什么很有帮助. 第一种方式: 1.首先判断K值和链表是否为空,如果k<=0,或链表为空,直接返回head: 2.满足上面 ...

  3. 无头结点单链表的逆置_从无头单链表中删除节点及单链表的逆置

    题目: 假设有一个没有头指针的单链表.一个指针指向此单链表中间的一个节点(非第一个节点, 也非最后一个节点).请将该节点从单链表中删除. 解答: 典型的"狸猫换太子", 若要删除该 ...

  4. 每日一题——leetcode237 删除链表中的结点

    1 题目 237. 删除链表中的节点 难度简单 请编写一个函数,用于 删除单链表中某个特定节点 .在设计函数时需要注意,你无法访问链表的头节点 head ,只能直接访问 要被删除的节点 . 题目数据保 ...

  5. 6-4 学生成绩链表处理 (20分) 本题要求实现两个函数,一个将输入的学生成绩组织成单向链表;另一个将成绩低于某分数线的学生结点从链表中删除。 函数接口定义: ```cpp struct stu

    6-4 学生成绩链表处理 (20分) 本题要求实现两个函数,一个将输入的学生成绩组织成单向链表:另一个将成绩低于某分数线的学生结点从链表中删除. 函数接口定义: struct stud_node *c ...

  6. 带哨兵节点的链_关于链表中哨兵结点问题的深入剖析

    算法 数据结构 关于链表中哨兵结点问题的深入剖析 最近正在学习UC Berkeley的CS61B这门课,主要是采用Java语言去实现一些数据结构以及运用数据结构去做一些project.这门课不仅告诉你 ...

  7. python链表中删除一个节点数据_python实现单链表中删除倒数第K个节点的方法

    本文实例为大家分享了python实现单链表中删除倒数第K个节点的具体代码,供大家参考,具体内容如下 题目: 给定一个链表,删除其中倒数第k个节点. 代码: class LinkedListAlgori ...

  8. 建立一个链表,每个结点包括:学号、姓名、性别、年龄。输入一个年龄,如果链表中的结点所包含的年龄等于此年龄,则将此结点删去。(自己编程)

    建立一个链表,每个结点包括:学号.姓名.性别.年龄.输入一个年龄,如果链表中的结点所包含的年龄等于此年龄,则将此结点删去.最近接触到了链表的编程学习,遇到这样的比较基础的编程,程序表现大致分为几个步骤 ...

  9. 《程序员代码面试指南》第二章 链表问题 在单链表和双链表中删除倒数第K个节点...

    题目 在单链表和双链表中删除倒数第K个节点 java代码 /*** @Description:在单链表和双链表中删除倒数第K个节点* @Author: lizhouwei* @CreateDate: ...

  10. 从无头单链表中删除节点 结构之法 4

    题目: 假设有一个没有头指针的单链表.一个指针指向此单链表中间的一个节点(不是第一个,也不是最后一个节点),请将该节点从单链表中删除. 分析与解答: 假设给定的指针为pCurrent,Node *pN ...

最新文章

  1. Linux学习之系统编程篇:信号量(sem_init / wait / trywait / post / destroy)
  2. boost::math::owens_t用法的测试程序
  3. ubuntu 12.04 php mysql_Ubuntu 12.04下LAMP安装配置
  4. node.js小案例_留言板
  5. 电脑记时----千年虫
  6. Java-n个人报数
  7. java中两任务并行运行_Java并行编程中的“可调用”与“可运行”任务
  8. 电脑密码忘记怎么办??
  9. 安全彻底的卸载工具App Cleaner Uninstaller for Mac
  10. [转载]Badboy使用教程
  11. 单片机12864带字库汇编使用教程
  12. vue引入自定义字体otf、ttf字体的方法
  13. UBuntu安装配置记录
  14. 计算机一级证件照尺寸,照相馆不会告诉你的哪些事:常用证件照尺寸汇总
  15. DeepFace: Closing the Gap to Human-Level Performance in Face Verification
  16. CLH lock queue的原理解释及Java实现
  17. Salesforce触发器面试题
  18. 新奥股份2019年经营性现金流和主营业务收入稳健增长
  19. Chinfa DRA480-24A
  20. 中国商业油库及码头行业运行动态分析及投资规划建议研究报告2022年版

热门文章

  1. 开源能带来什么?听听入选2021胡润U30创业领袖榜单的90后怎么说
  2. 通过历史控制文件恢复Oracle数据库,只需这10步
  3. 经验:Library Cache Lock之异常分析-云和恩墨技术通讯精选
  4. 普通索引和唯一索引,难道还分不清
  5. Volcano 监控设计解读,一看就懂
  6. 关于服务发现和负载均衡,你想知道的都在这儿
  7. 华为云全球首发企业级AI应用开发套件ModelArts Pro,加速行业AI落地
  8. Extensions in UWP Community Toolkit - ViewExtensions
  9. 人人学IoT 助学思维导图
  10. 直播课:5G来了,互联网百亿级创新的机遇在哪里?