数据结构学习系列之单向链表的三种删除方式

  • 方式1:
  • 删除单向链表头结点后的结点,即头删法,代码如下:
  • 示例代码:
int delete_link_list_1(node_t *phead){if(NULL == phead){printf("入参为NULL\n");return -1;}if(NULL == phead->next){printf("链表只有一个头结点,无其他的结点\n");return -1;}node_t *pdel = phead->next;phead->next = pdel->next;free(pdel);pdel = NULL;return 0;}
  • 操作步骤:
  • 1.定义待删结点pdel,并将待删结点的地址指向头结点的指针域,备份待删结点,即node_t *pdel = phead->next
  • 2.头结点的指针域指向待删结点后的结点的地址,即phead->next = pdel->next
  • 3.用free函数释放待删结点所占用的空间,即 free(pdel)
  • 4.防止野指针产生,给待删结点的地址赋值NULL,即pdel = NULL
  • 方式2:
  • 删除单向链表的最后一个结点,即尾删法,代码如下:
  • 示例代码:
int delete_link_list_2(node_t *phead){if(NULL == phead){printf("入参为NULL\n");return -1;}if(NULL == phead->next){printf("链表只有一个头结点,无其他的结点\n");return -1;}//遍历链表,找到倒数第二个结点node_t *ptemp = phead;while(NULL != ptemp->next->next){ptemp = ptemp->next;}free(ptemp->next);ptemp->next = NULL;return 0;}
  • 操作步骤:

  • 1.利用while循环,遍历单向链表,找到倒数第二个结点,即ptemp

  • 2.释放ptemp的指针域,并赋值NULL,这样就删除了链表的最后一个结点;

  • 方式3:

  • 指定结点在链表中的位置,然后根据位置,删除待删结点,代码如下:

  • 示例代码:

int delete_link_list_3(node_t *phead,int pos){if(NULL == phead){printf("入参为NULL\n");return -1;}if(NULL == phead->next){printf("链表只有一个头结点,无其他的结点\n");return -1;}if(pos < 0){printf("删除位置不合理,删除失败\n");return -1;}node_t *ptemp = phead;int i = 0;for(i = 0; i < pos; i++){ptemp = ptemp->next;if(NULL == ptemp->next){break;}}if(i < pos){printf("删除位置不合理,删除失败\n");return -1;}node_t *pdel = ptemp->next;ptemp->next = pdel->next;free(pdel);pdel = NULL;return 0;}
  • 操作步骤:
  • 1.找到待删结点的前一个结点ptemp;
  • 2.定义待删结点,并指向待删结点前一个结点的指针域,备份待删结点,即node_t *pdel = ptemp->next
  • 3.待删结点前一个结点的指针域指向待删结点的指针域,也就是待删结点后面那个结点的地址,即ptemp->next = pdel->next
  • 4.用free函数释放待删结点所占用的空间,即 free(pdel)
  • 5.防止野指针产生,给待删结点的地址赋值NULL,即pdel = NULL

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/66406.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java-初识Servlet,Tomcat,JDBC

文章目录 前言一、ServletServlet 生命周期Servlet 实例Servlet 过滤器 二、TomcatJDBCJDBC连接数据库实例 总结 前言 java入门须知的重要概念/名词/技术 等 一、Servlet Servlet是Java Web开发中的一个核心组件&#xff0c;它是基于Java语言编写的服务器端程序&#xff0c;…

Boa服务器与Cgi简介

Boa是一个单任务的HTTP服务器&#xff0c;Boa只能依次完成用户的请求&#xff0c;而不会fork出新的进程来处理并发连接请求。Boa支持CGI。Boa的设计目标是速度和安全&#xff0c;这很符合嵌入式的需要&#xff0c;他的特点就是可靠性和可移植性。 Boa的作用&#xff1a; 负责h…

Redis 内存淘汰策略详解

Redis 内存淘汰策略详解 一、简介Redis内存管理问题 二、内存淘汰策略1.为什么需要内存淘汰策略2.内存淘汰策略分类&#xff08;1&#xff09;noeviction&#xff08;2&#xff09;allkeys-lru&#xff08;3&#xff09;allkeys-lfu&#xff08;4&#xff09;volatile-lru&…

Error: PostCSS plugin autoprefixer requires PostCSS 8 问题解决办法

报错&#xff1a;Error: PostCSS plugin autoprefixer requires PostCSS 8 原因&#xff1a;autoprefixer版本过高 解决方案&#xff1a; 降低autoprefixer版本 执行&#xff1a;npm i postcss-loader autoprefixer8.0.0

Dubbo 应用切换 ZooKeeper 注册中心实例,流量无损迁移

首先思考一个问题&#xff1a;如果 Dubbo 应用使用 ZooKeeper 作为注册中心&#xff0c;现在需要切换到新的 ZooKeeper 实例&#xff0c;如何做到流量无损&#xff1f; 本文提供解决这个问题的一种方案。 场景 有两个基于 Dubbo 的微服务应用&#xff0c;一个是服务提供者&…

降噪音频转录 Krisp: v1.40.7 Crack

主打人工智能降噪服务的初创公司「Krisp」近期宣布推出音频转录功能&#xff0c;能对电话和视频会议进行实时设备转录。该软件还整合的ChatGPT&#xff0c;以便快速总结内容&#xff0c;开放测试版于今天上线。 随着线上会议越来越频繁&#xff0c;会议转录已成为团队工作的重…

6 | 从文本文件中读取单词并输出不重复的单词列表

Transformation 操作 Transformation 操作是用于从一个 RDD(Resilient Distributed Dataset)创建一个新的 RDD,通常是通过对原始 RDD 的元素进行映射、筛选、分组等操作来实现的。Transformation 操作不会立即执行,而是惰性计算,只有在 Action 操作触发时才会真正执行。以…

Linux执行命令

命令格式 主命令 选项 参数&#xff08;操作对象&#xff09;例如&#xff1a; 修改主机名 hostname set-hostname 新名称显示/目录下的文件的详细信息 ls -l /命令 内置命令&#xff08;builtin&#xff09;&#xff1a;shell程序自带的命令。 外部命令&#xff1a;有独立…

git企业级使用

1.初始Git 1.1创建Git仓库 要提前说的是&#xff0c;仓库是进⾏版本控制的⼀个⽂件⽬录。我们要想对⽂件进⾏版本控制&#xff0c;就必须先创建⼀个仓库出来。创建⼀个Git本地仓库对应的命令为 git init &#xff0c;注意命令要在⽂件⽬录下执⾏&#xff0c;例如&#xff1a;…

科创板50ETF期权交易:详细规则、费用、保证金和开户攻略

科创板50ETF期权是指以科创板50ETF为标的资产的期权合约。科创板50ETF是由交易所推出的一种交易型开放式指数基金&#xff08;ETF&#xff09;&#xff0c;旨在跟踪科创板50指数的表现&#xff0c;下文介绍科创板50ETF期权交易&#xff1a;详细规则、费用、保证金和开户攻略&am…

kafka 动态扩容现有 topic 的分区数和副本数

文章目录 [toc]创建一个演示 topic生产一些数据使用消费者组消费数据增加分区无新数据产生&#xff0c;有旧数据未消费有新数据产生&#xff0c;有旧数据未消费 增加副本创建 json 文件使用指定的 json 文件增加 topic 的副本数使用指定的 json 文件查看 topic 的副本数增加的进…

日志文件之间关系和介绍及应用

1.常用日志框架代码举例 Log4j: Log4j是Java中广泛使用的日志框架之一。它提供了灵活的配置选项和丰富的功能&#xff0c;支持日志级别、日志输出目标等。Log4j有1.x版本和2.x版本&#xff0c;其中Log4j 2.x是对1.x的升级和扩展。 Logback: Logback是由Log4j创始人设计的Log4…

Java8新特性2——方法引用

Java8新特性2——方法引用 注&#xff1a;以下内容基于Java 8&#xff0c;所有代码都已在Java 8环境下测试通过 目录&#xff1a; Java8新特性1——函数式接口&lambda表达式方法引用Stream 1. 方法引用 方法引用提供了一种替代 lambda 表达式的语法&#xff0c;允许以更…

Docker 及 Docker Compose 安装指南

Docker 是一个开源的容器化平台&#xff0c;可以帮助我们快速构建、打包和运行应用程序。而 Docker Compose 则是用于管理多个容器应用的工具&#xff0c;可以轻松定义和管理多个容器之间的关系。现在&#xff0c;让我们开始安装过程吧&#xff01; docker 安装 apt安装 sudo…

C++,多继承

多继承的基本概念 一个类由多个类共同派生被称为多继承。 多继承的格式&#xff1a; class 类名:继承方式1 类名1,继承方式2 类名2,.....,继承方式n 类名n {子类的拓展 }; 示例&#xff1a; #include <iostream> using namespace std;//封装 沙发的类 class Sofa { p…

202. 快乐数

202. 快乐数 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为&#xff1a; 对于一个正整数&#xff0c;每一次将该数替换为它每个位置上的数字的平方和。 然后重复这个过程直到这个数变为 1&#xff0c;也可能是 无限循环 但始终变不到 1。 如果这个过程 结果…

从传统到智能化:汽车内部通信的安全挑战与SecOC解决方案

01/需求背景 Demand background 在传统的汽车电子结构中&#xff0c;车内的电控单元&#xff08;ECU&#xff09;数量和复杂性受到限制&#xff0c;通信带宽也受到限制。因此&#xff0c;人们普遍认为车内各个ECU之间的通信是可靠的。只要ECU节点接收到相应的消息&#xff0c…

华为OD机试 - 最长的指定瑕疵度的元音子串 - 正则表达式(Java 2023 B卷 200分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷&#…

9.1 校招 内推 面经

绿泡*泡&#xff1a; neituijunsir 交流裙 &#xff0c;内推/实习/校招汇总表格 1、校招 | 理想汽车2024校园招聘正式启动&#xff08;内推&#xff09; 校招 | 理想汽车2024校园招聘正式启动&#xff08;内推&#xff09; 2、2023校招总结--自动驾驶&#xff08;软开/规控…

[libglog][FFmpeg] 如何把 ffmpeg 的库日志输出到 libglog里

ffmpeg 提供了自己的 log 模块 av_log&#xff0c;会默认把输出打印到 stderr 上&#xff0c;因此无法方便地跟踪日志。但是 ffmpeg 提供了一个接口 av_log_set_callback 以供外界自定义自己的日志输出。 libglog 提供的是c 形式的日志输出样式&#xff0c;因此需要将二者关联起…