单链表经典算法LeetCode--203.移除链表元素(两种方法解)

1.链接:. - 力扣(LeetCode)【点击即可跳转】

分析此题提供两种思路:

1.遍历原链表,将值为val的节点释放掉(双指针法)

 定义一个pcur指针指向头节点,定义一个prev指针指向NULL

需要注意:链表中有连续的val头节点就是val 的情况。

代码实现为:

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     struct ListNode *next;* };*/
struct ListNode* removeElements(struct ListNode* head, int val)
{struct ListNode* prev, *pcur;prev = NULL;pcur = head;while (pcur) //pcur为空时,跳出循环{if (pcur->val != val) {prev = pcur; pcur = pcur->next; }else{ // 当pcur等于valstruct ListNode* pcurHead = pcur->next;            if (prev == NULL) // 头节点就为val的情况{ free(pcur); head = pcurHead; // 更新头节点pcur = pcurHead; // 然后把新的头节点的地址赋给pcur}else {   free(pcur); // 释放val元素prev->next = pcurHead; // pcurHead存的是pcur的next,所以直接赋给prev的nextpcur = pcurHead; // 然后让pcur指向下一个节点的地址}}}return head;
}

2.找值不为val的节点,尾插到新链表中

创建新链表,定义newTail指针进行尾插,定义pcur指针进行遍历

需要注意:在跳出循环后,将newTail指向下一个节点的指针置为空。

struct ListNode* removeElements(struct ListNode* head, int val)
{//创建一个空链表struct ListNode* newHead, * newTail;newHead = newTail = NULL;//遍历原链表struct ListNode* pcur = head;while (pcur){//找值不为val的节点,尾插到新链表中if (pcur->val != val){//链表为空if (newHead == NULL){newHead = newTail = pcur;}else//链表不为空{newTail->next = pcur;newTail = newTail->next;}}pcur = pcur->next;}if (newTail)newTail->next = NULL;return newHead;
}

感谢观看,如果对你有帮助,点赞支持一下吧^.^

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

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

相关文章

【全开源】微凌客洗护小程序FastAdmin+Uniapp(源码搭建/上线/运营/售后/维护更新)

一款基于FastAdminUniapp开发的洗护小程序系统,适用于线上下单到店核销的业务场景,拥有会员卡、优惠券、充值提现、商户管理等功能,提供Uniapp后台无加密源代码。 线上线下融合:微凌客洗护小程序适用于线上下单到店核销的业务场景…

基于SpringBoot+Vue社区老人健康信息管理系统

摘 要 如今社会上各行各业,都喜欢用自己行业的专属软件工作,互联网发展到这个时候,人们已经发现离不开了互联网。新技术的产生,往往能解决一些老技术的弊端问题。因为传统社区老人健康信息管理系统信息管理难度大,容错…

Python-VBA函数之旅-staticmethod函数

目录 一、staticmethod函数的常见应用场景 二、staticmethod函数使用注意事项 三、如何用好staticmethod函数? 1、staticmethod函数: 1-1、Python: 1-2、VBA: 2、推荐阅读: 个人主页: https://blog…

鸿蒙开发-ArkTS语言-XML

鸿蒙开发-UI-web 鸿蒙开发-UI-web-页面 鸿蒙开发-ArkTS语言-基础类库 鸿蒙开发-ArkTS语言-并发 鸿蒙开发-ArkTS语言-并发-案例 鸿蒙开发-ArkTS语言-容器 鸿蒙开发-ArkTS语言-非线性容器 文章目录 前言 一、XML概述 二、XML生成 三、XML解析 1.解析XML标签和标签值 2.解析XML属性…

Matlab 验证 复数的幂计算规则

复数的幂计算规则 close all a9; b0:0.1:5;result1 exp(1j*2*pi*a.*b); result2 (exp(1j*2*pi*a)).^b; idxfind(result1result2); b_idxb(idx);figure plot(b,angle(result1(:)),-r*) hold on plot(b,angle(result2(:)),bo) grid on

QT如何增删安装的组件

打开 uninstall QT 往下会看到让你选择 add or remove component。 接下去就可以修改组件了

Qt开发常见报错大全与解决办法

下面的报错是我日常开发经常遇到的,对着下面的解决方法一招搞定就行了。 我们没必要都去记住,只需要见方抓药即可。 目前版本有27个常见报错,持续更新中。 常见报错 翻译不起作用 你可能改了类名字,但是.ts文件里没有跟着改。 Cannot send events to objects owned by a…

目标检测算法YOLOv8简介

YOLOv8论文尚未发布,YOLOv8由Ultralytics公司推出并维护,源码见:https://github.com/ultralytics/ultralytics ,于2024年1月发布v8.1.0版本,最新发布版本为v8.2.0,License为AGPL-3.0。 以下内容主要来自&am…

Linux-vi、vim

使用Xshell远程登录到Linux主机进行操作 命令行不用全部掌握, 一般编辑大文件,比较复杂的情况下, 我们还是使用Xftp工具, down下来再恢复回去。

day02-运算符和流程控制语句

Day 02 Java基础语法 1 .运算符 运算符:对字面量或者变量进行操作的符号 表达式:用运算符把字面量或者变量连接起来符合java语法的式子就可以称为表达式。不同运算符连接的表达式体现的是不同类型的表达式 例如:int a 10; int b 20; int c a b; 就叫做运算符 a b就叫表…

用hMailServer+roundcubemail+宝塔安装配置一个自己的邮箱服务

用hMailServerroundcubemail安装配置一个自己的邮箱服务 1、准备工具与资料: 云服务器一台 基础配置就行 2核4G。域名一个 以下用lizipro.cn示例。hMailServer安装包roundcubemail安装包异常处理插件补丁: libmysql.zip 2、hMailServer服务安装&#…

MyBatis-plus(一):快速入门

目录 一、MyBatis-plus 快速入门 1、原理 2、实体类命名规则 3、常见注解 4、主键 id 策略 5、使用 TableField 的常见场景 6、常用配置 二、核心功能 1、条件构造器 2、自定义 SQL 3、IService 接口 一、MyBatis-plus 快速入门 1、原理 MyBatisPlus 通过扫描实体…