解释都在代码里了

#include <stdio.h>
#include <stdlib.h>
//主要讲删除部分的函数
struct ListNode
{int data;struct ListNode* next;
};
struct ListNode* readlist()
{struct ListNode* head=NULL,*node,*tempp=NULL;int n;while (scanf("%d", &n)&&n !=-1){node = (struct ListNode*)malloc(sizeof(struct ListNode));node->data = n;node->next = NULL;if (head == NULL)head = node;elsetempp->next = node;tempp = node;}return head;
}
struct ListNode* deletem(struct ListNode* L, int m)
{struct ListNode *head,*tempp,*t;//t保存被释放内存地址,tempp是上一节点地址,head就是头节点的地址head = tempp = t = NULL;head = L;while (L!=NULL){if (L->data == m)//符合条件{if (head->data == m)//头节点的删除{t = head;//t的作用是保存被删除节点的地址,在循环尾部再释放head = head->next;//头部后移,这就是为什么要返回头部的值重新赋值给L的原因}else//普通节点和尾节点{t = L;//作用同上tempp->next = L->next;//上一个节点的指针跨过中间的节点指向下一个节点的地址}}tempp = L;//tempp储存上一个节点的地址L = L->next;//节点下移一位free(t);//释放内存t = NULL;//这点很重要,否则当下一个值不符合条件,t将指向被释放的内存的地址}return (head);//返回头指针(这括号其实没啥用,说明这是一个指针)
}
void printlist(struct ListNode* L)
{struct ListNode* p = L;while (p){printf("%d ", p->data);p = p->next;}printf("\n");
}
int main()
{int m;struct ListNode* L = readlist();//函数作用:输入并创建链表,将链表头指针返回存到L中scanf("%d", &m);//输入要删除的数L = deletem(L, m);//该函数返回删除数据后链表的头指针printlist(L);//打印return 0;
}

习题11-8 单链表结点删除(没看懂我撤硕大口吃翔)相关推荐

  1. 习题11-8 单链表结点删除

    本题要求实现两个函数,分别将读入的数据存储为单链表.将链表中所有存储了某给定值的结点删除. 链表结点定义如下: struct ListNode {int data;ListNode *next; }; ...

  2. 6-3 单链表结点删除 (20分)

    本题要求实现两个函数,分别将读入的数据存储为单链表.将链表中所有存储了某给定值的结点删除.链表结点定义如下: struct ListNode { int data; ListNode *next; } ...

  3. 单链表结点删除--PTA

    本题要求实现两个函数,分别将读入的数据存储为单链表.将链表中所有存储了某给定值的结点删除.链表结点定义如下: struct ListNode {int data;ListNode *next; }; ...

  4. PTA 单链表结点删除

    本题要求实现两个函数,分别将读入的数据存储为单链表.将链表中所有存储了某给定值的结点删除.链表结点定义如下: struct ListNode {int data;ListNode *next; }; ...

  5. 单链表结点删除PTA

    本题要求实现两个函数,分别将读入的数据存储为单链表.将链表中所有存储了某给定值的结点删除.链表结点定义如下: struct ListNode {int data;ListNode *next; }; ...

  6. Nwafu-OJ-1485 Problem o C语言实习题八——单链表结点的阶乘和

    问题 : C语言实习题八--单链表结点的阶乘和 时间限制: 1 Sec  内存限制: 128 MB 提交: 5120  解决: 1555 [提交][状态][讨论版] 题目描述 要求实现一个函数,求单向 ...

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

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

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

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

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

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

最新文章

  1. LeetCode 简要日记 455 104
  2. 虚拟机克隆_了解Java中的可克隆接口
  3. mysql汉化版不同_Mysql各个版本区别及官网下载
  4. python自动化干什么-高效工作,拒绝加班,看Python自动化功能到底有多强大
  5. POJ3272 Cow Traffic
  6. while(scanf(%d,n)!=EOF)
  7. 百度定位sdk使用说明
  8. [转载]spring security 的 logout 功能
  9. HTTPS原理全面介绍【备查】
  10. Linux学习之shell
  11. C语言内存泄漏问题检视方法
  12. arduino循迹小车
  13. NoSQL数据库兴起
  14. 网页在线播放器 ····
  15. Java毕业设计——员工管理系统
  16. OFDM系统中的信号检测算法分类和详解
  17. 最新卡巴斯基互联网安全套装7.0(kis7)系列激活码
  18. RESTFUL API 安全设计指南
  19. Elk-Metricbeat配置Nginx的日志分析 (Metricbeat-part2)
  20. 北京最最最牛的IT公司都在这了 。。。

热门文章

  1. C语言中对结构体赋初值
  2. Redis分布式锁防止缓存击穿
  3. 易拉罐被证实能增强WiFi信号 手机笔记本均适用
  4. 实现简易字符串压缩算法
  5. 08年A题数码相机定位学习笔记
  6. 视频消重软件吾爱伪原创 视频如何修改md5
  7. PPT封面制作方法一
  8. ubuntu实现中文输入法_Ubuntu 中文输入法安装
  9. TS实现原生数组方法之pop()、push()、shift()、unshift()
  10. 一个 70 后运维老兵的 Elastic 认证工程师之路