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

news2024/9/21 10:33:45

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等于val
        struct 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的next
           pcur = 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.coloradmin.cn/o/1666527.html

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

相关文章

Apache Flume事务

Apache Flume 中的事务处理是指 Flume Agent 在处理事件流时的一种机制,用于确保数据的可靠传输和处理。 1. 事务概述: Flume 中的事务是指一组事件的传输和处理,这些事件在传输过程中要么全部成功完成,要么全部失败&#xff0…

耦合协调分析模型

耦合协调分析模型(Coupling Coordination Analysis Model)是一种用于评估两个或多个系统之间相互作用和协调性的数学模型。广泛应用于多个领域,包括但不限于社会科学、经济学、环境科学和工程学。耦合协调分析模型的核心在于量化系统间的耦合…

关键点检测——面部情绪数据集

引言 亲爱的读者们,您是否在寻找某个特定的数据集,用于研究或项目实践?欢迎您在评论区留言,或者通过公众号私信告诉我,您想要的数据集的类型主题。小编会竭尽全力为您寻找,并在找到后第一时间与您分享。 …

紫光计算机项目卓越中心负责人孙宇受邀为第十三届中国PMO大会演讲嘉宾

全国PMO专业人士年度盛会 紫光计算机科技有限公司信息技术中心项目总监&卓越中心负责人孙宇先生受邀为PMO评论主办的2024第十三届中国PMO大会演讲嘉宾,演讲议题为“PMO卓越中心核心能力拆解与落地-用创新绘制新蓝图”。大会将于6月29-30日在北京举办&#xff0c…

c++:刷题必备 容器map的使用

文章目录 map的概念map的使用构造![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/30e9a697b50d47a591af6e9ae2bbb7d7.png)insert迭代器遍历 findoperator[]举例 map的概念 map是一个关联容器,里面的每一个位置pair,会存储两个值,一个是key,另一个是value. 我们可以…

使用docker安装seafile

使用docker安装seafile 1 介绍seafile Seafile 是一款开源的企业云盘,支持全平台(浏览器、Windows、Mac、Linux、Android、IPhone等)客户端。Seafile 内置协同文档 SeaDoc ,让协作撰写、管理和发布文档更便捷。最重要的这是国产…

一件事做了十年

目录 一、背景二、过程1.贫困山区的心理悲哀2.基础差的客观转变3.对于教育的思考4.持续做这件事在路上5.同行人有很早就完成的,有逐渐放弃的,你应该怎么办?6.回头看,什么才是最终留下的东西? 三、总结 一、背景 在哪里出生我们无…

关于一致性,你该知道的事儿(下)

关于一致性,你该知道的事儿(下) 前言一、并发修改单个对象1.1 原子写操作1.2 显示加锁1.3 原子的TestAndSet1.4 版本号机制 二、 多个相关对象的一致性2.1 最大努力实现2.2 2PC && TCCC2.3.基于可靠消息的一致性方案2.4.Saga事务 三、…

docker搭建redis6.0(docker rundocker compose演示)

文章讲了:docker下搭建redis6.0.20遇到一些问题,以及解决后的最佳实践方案 文章实现了: docker run搭建redisdocker compose搭建redis 搭建一个redis’的过程中遇到很多问题,先简单说一下搭建的顺序 找一个redis.conf文件&…

LaTeX多行公式中\split出现一长一短多行公式无法居中

最近在整理一篇论文时出现了一长一短多行公式的问题无法居中 类似下图的情况: 这部分的代码如下: \begin{equation} \begin{split} \scalebox{0.75}{$X_{n} C$}\\ \scalebox{0.75}{$X_{m} \biggl\{\begin{array}{ll} \sum\limits_{i1}^{n} [X_{i} …

Java语法学习九之内部类和异常

目录 内部类 实例内部类 静态内部类 局部内部类 匿名内部类 异常 异常的体系结构 异常的分类 编译时异常 运行时异常 异常的处理 防御型编程 异常的抛出 异常的捕获 异常声明throws ​编辑 try-catch捕获并处理 finally 自定义异常类 内部类 实例内部类 p…

二叉树的非递归遍历(c++)

前序 . - 力扣(LeetCode). - 备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/binary-tree-preorder-traversal/description/ 1---2---4---5--…

如何修复显示器或笔记本电脑屏幕的黄色色调?这里提供几种方法

序言 如果你的笔记本电脑屏幕呈淡黄色,则可以启用夜灯功能。该问题也可能源于连接松散的显示电缆、损坏的显卡驱动程序或错误配置的显示器设置。以下是一些故障排除步骤,你可以尝试解决此问题。 禁用夜间模式 夜间模式功能旨在减少显示器的蓝色色调,使屏幕看起来更温暖,…

解决axios发送post请求,springMVC接收不到数据问题

今天发现一个问题: vue组件中无法正确接收并处理axios请求 这个问题已经困扰我好久了,在电脑面前坐了两天只能确定前端应该是正确的发送了请求,但发送请求后无法正确接受后端返回的数据。 问题:vue组件无法接受后端数据 错误代码如…

【信号与槽机制】

信号与槽机制 🌟 信号函数🌟 槽函数🌟 连接函数🌸 QObejct::connect函数剖析🌟 官方文档中给出的定义🌟《Qt 5.9 C开发指南》中的定义 🌟 信号函数 信号是一种特殊的成员函数,用于在…

JVM 类加载机制

JVM 类加载机制分为五个部分:加载,验证,准备,解析,初始化,下面我们就分别来看一下这五个过程。 加载 加载是类加载过程中的一个阶段,这个阶段会在内存中生成一个代表这个类的 java.lang.class 对…

用户管理中心——登录功能

用户管理中心——登录功能 一、用户登录1. 登录设计2. 登录方法实现实现细节逻辑删除实现代码 3. 登录接口实现4. 测试 二、用户管理用户管理接口 一、用户登录 1. 登录设计 2. 登录方法实现 实现细节 首先在接口中com.example.demo.service.UserService定义一个用户登录doL…

HSB色彩模式计算详解

HSB色彩模式计算详解 前些天撰文几篇介绍了几种圆形和矩形的HSB绘制方法。后2篇介绍了HSB的计算方法。我感到不是很详细,今再补充说明计算方法。 圆形H调色板选色,计算 Rad, ang, L, return H 计算二点距离 L,取色点到圆心距离 x0250;…

https://是怎么实现的?

默认的网站建设好后都是http访问模式,这种模式对于纯内容类型的网站来说,没有什么问题,但如果受到中间网络劫持会让网站轻易的跳转钓鱼网站,为避免这种情况下发生,所以传统的网站改为https协议,这种协议自己…

【牛客】SQL201 查找薪水记录超过15条的员工号emp_no以及其对应的记录次数t

1、描述 有一个薪水表,salaries简况如下: 请你查找薪水记录超过15条的员工号emp_no以及其对应的记录次数t,以上例子输出如下: 2、题目建表 drop table if exists salaries ; CREATE TABLE salaries ( emp_no int(11) NOT N…