203、移除链表元素

1、题目描述

给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。

示例 1:

输入:head = [1,2,6,3,4,5,6], val = 6
输出:[1,2,3,4,5]

示例 2:

输入:head = [], val = 1
输出:[]

示例 3:

输入:head = [7,7,7,7], val = 7
输出:[]

提示:

  • 列表中的节点数目在范围 [0, 104] 内
  • 1 <= Node.val <= 50
  • 0 <= val <= 50

2、分析

没啥说的。

另外,在实现的时候无论用一个指针还是两个指针都是可以的;节点值是否等于val的if……else逻辑区分清楚就好。

2.1、一个指针的实现

class Solution {
public:ListNode* removeElements(ListNode* head, int val) {ListNode dummy(0, head);ListNode *cur = &dummy;while(cur->next){//如果cur.next就是目标节点。那么,cur保持不变、将cur->next指向下一个节点。if(cur->next->val == val){cur->next = cur->next->next;//如果cur.next不是目标节点。那么,cur后移一步即可。}else{cur = cur->next;}}return dummy.next;}
};

2.2、使用两个指针

一个指针指向pre、一个指针指向cur。

class Solution {
public:ListNode* removeElements(ListNode* head, int val) {ListNode dummy(0, head);ListNode *pre = &dummy;ListNode *cur = pre->next;while(cur){//如果是要删除的节点。则:cur后移、pre不变、pre->next要更新if(cur->val == val){cur = cur->next;pre->next = cur;//如果不是要删除的节点。则: cur后移、pre也后移}else{cur = cur->next;pre = pre->next;}}return dummy.next;}
};

3、实现代码

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <queue>
#include <map>using namespace std;struct ListNode{int val;ListNode * next;ListNode(): val(0), next(nullptr){}ListNode(int x): val(x), next(nullptr) {}ListNode(int x, ListNode* n): val(x), next(n) {}
};class Solution {
public:ListNode* removeElements(ListNode* head, int val) {ListNode dummy(0, head);ListNode *cur = &dummy;while(cur->next){//如果cur.next就是目标节点。那么,cur保持不变、将cur->next指向下一个节点。if(cur->next->val == val){cur->next = cur->next->next;//如果cur.next不是目标节点。那么,cur后移一步即可。}else{cur = cur->next;}}return dummy.next;}
};void printList(ListNode* head){while(head){cout << head->val << ",";head = head->next;}cout << endl;
}int main()
{Solution s1;ListNode n5(7);ListNode n4(7, &n5);ListNode n3(7, &n4);ListNode n2(7, &n3);ListNode n1(7, &n2);printList(&n1);ListNode* new_head = s1.removeElements(&n1, 7);printList(new_head);
}

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

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

相关文章

基于迁移学习的手势分类模型训练

1、基本原理介绍 这里介绍的单指模型迁移。一般我们训练模型时&#xff0c;往往会自定义一个模型类&#xff0c;这个类中定义了神经网络的结构&#xff0c;训练时将数据集输入&#xff0c;从0开始训练&#xff1b;而迁移学习中&#xff08;单指模型迁移策略&#xff09;&#x…

Layui修改表格分页为英文

Layui修改表格分页为英文 1.前言2.Laypage属性 1.前言 主要记录初次使用Layui没有好好看官方文档踩坑&#xff0c;修改了源码才发现可以自定义 使用的Layui版本2.9.14 2.Laypage属性 Laypage属性中带的有自定义文本的属性 示例代码 table.render({.......page: {skipText: …

状态机 XState 使用

状态机 一般指的是有限状态机&#xff08;Finite State Machine&#xff0c;FSM&#xff09;&#xff0c;又可以称为有限状态自动机&#xff08;Finite State Automation&#xff0c;FSA&#xff09;&#xff0c;简称状态机&#xff0c;它是一个数学模型&#xff0c;表示有限个…

硬核科普:什么是网络准入控制系统|网络准入控制系统四大品牌介绍

网络准入控制系统&#xff08;Network Access Control, NAC&#xff09;是一种用于确保只有授权设备和用户才能接入网络的安全技术。 本文将介绍几种常用的网络准入控制系统&#xff0c;帮助您更好地了解如何选择适合您企业的NAC系统。 网络准入控制的重要性和作用 网络准入控…

java学习--练习题

在类中this.属赋值&#xff0c;则外部创建对象调用其值也会随之一样 package com.test01;/* author:我与java相爱相杀---c语言梦开始的地方 今天又是努力学习的一天&#xff01;&#xff01;&#xff01;&#xff01; */ /*1. 在Frock类中声明私有的静态属性currentNum[int类型…

idm软件最新破解版下载 idm永久激活码 IDM中文绿色特别版 idm下载器汉化版

在互联网时代&#xff0c;下载管理软件成为了我们日常使用电脑不可或缺的工具之一。说起下载工具&#xff0c;大家的第一反应可能是网盘、迅雷。但在PC端其实还有一个可以对标他们的软件——IDM&#xff0c;这是一个口碑炸裂的多线程下载工具。 Internet Download Manager&…

让你的设计更出色:10个最受欢迎的3D画图工具盘点

随着渲染工具的发生和客户对立体效果的要求越来越高&#xff0c;设计师应该能够及时用设计风格解释空间界面&#xff0c;全面使用3D画图工具进行展览设计。3D画图工具在建筑、工程、产品设计等行业使用不同的算法&#xff0c;为图像添加色调、质感等细节。不同类型的3D画图工具…

鸿蒙HarmonyOS【应用开发五、组件介绍】

✍️作者简介&#xff1a;小北编程&#xff08;专注于HarmonyOS、Android、Java、Web、TCP/IP等技术方向&#xff09; &#x1f433;博客主页&#xff1a; 开源中国、稀土掘金、51cto博客、博客园、知乎、简书、慕课网、CSDN &#x1f514;如果文章对您有一定的帮助请&#x1f…

Java之 jvm

jvm之管理内存 程序计数器&#xff1a;当前线程所执行的字节码的行号指示器。程序计数器是唯一一个不会出现 OutOfMemoryError 的内存区域&#xff0c;它的生命周期随着线程的创建而创建&#xff0c;随着线程的结束而死亡。Java虚拟机栈 方法调用 一个方法调用都会有对应的栈帧…

Redis - SpringDataRedis - RedisTemplate

目录 概述 创建项目 引入依赖 配置文件 测试代码 测试结果 数据序列化器 自定义RedisTemplate的序列化方式 测试报错 添加依赖后测试 存入一个 String 类型的数据 测试存入一个对象 优化 -- 手动序列化 测试存入一个Hash 总结&#xff1a; 概述 SpringData 是 S…

《Milvus Cloud向量数据库指南》——BGE-M3:多功能、多语言、多粒度的文本表示学习模型

引言 在自然语言处理(NLP)领域,随着大数据时代的到来,对文本信息的精准处理与高效检索成为了研究热点。BERT(Bidirectional Encoder Representations from Transformers)作为近年来NLP领域的里程碑式模型,以其强大的上下文理解能力在多项任务中取得了显著成效。然而,面…

刘纪鹏:“3万亿资金将股市拉升至4000点”,你能赚?

本周刘纪鹏提出了一个观点&#xff1a;花费3万亿资金将股市拉升至4000点&#xff0c;有望带来25万亿的财富增长。 3万亿的投入与25万亿的潜在增长确实令人心动。股市并非简单的投入资金就能涨&#xff0c;还需要考虑市场情绪、经济基本面等因素的影响。举个例子&#xff0c;某个…

【leetcode 详解】找出区分值(C++思路详解):这【中等】题怎么十分钟就写完了?

评价&#xff1a;就笔者的感觉吧&#xff0c;leetcode上难度标为“中等”的题目往往不是说需要什么高深的算法来解决&#xff0c;但基本都涉及到 “问题转化” 的能力要求&#xff0c;换言之&#xff0c;难点往往在于思维。 tip&#xff1a;要解决这类问题&#xff0c;笔者推荐…

python3.10.4——Windows环境安装

python下载官网&#xff1a;https://www.python.org/downloads/ 如果安装在C盘&#xff0c;需要右键→选择“以管理员身份运行” 勾选2个按钮&#xff0c;选择自定义安装 全部选择&#xff0c;点击Next 更改安装路径 命令行检查python是否安装成功&#xff1a; 出现版本号说明…

如何使用C#自制一个Windows安装包

原文链接&#xff1a;https://www.cnblogs.com/zhaotianff/p/17387496.html 以前都在用InstallShield制作安装包&#xff0c;基本需求是能满足的&#xff0c;但也有一些缺点&#xff1a; 1、界面不能完全定制 2、不能直接调用代码里的功能 平常使用一些其它软件&#xff0c;…

数据结构(Java):Map集合Set集合哈希表

目录 1、介绍 1.1 Map和Set 1.2 模型 2、Map集合 2.1 Map集合说明 2.2 Map.Entry<K&#xff0c;V> 2.3 Map常用方法 2.4 Map注意事项及实现类 3、Set集合 3.1 Set集合说明 3.2 Set常用方法 3.3 Set注意事项及其实现类 4、TreeMap&TreeSet 4.1 集合类TreeM…

嵌入式中什么是三次握手

在开始前刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「嵌入式的资料从专业入门到高级教程」&#xff0c;点个关注在评论区回复“666”之后私信回复“666”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01; 在网络数据传输中&#xf…

pytorch3d的安装

在这个网址中&#xff0c;下载对应的pytorch3d安装包 https://anaconda.org/pytorch3d/pytorch3d/files下载完成后使用下面命令进行安装 conda install ./pytorch3d-0.7.7-py39_cu118_pyt201.tar.bz2

可见性::

目录 定义&#xff1a; 解决方法&#xff1a; ①使用synchronized实现缓存和内存的同步 修改一&#xff1a; 加入语句&#xff1a; 代码&#xff1a; 修改2&#xff1a; 在代码块中加入&#xff1a; 代码&#xff1a; 执行结果&#xff1a; 原因&#xff1a; ②使用…

Linux--Socket 编程 UDP(简单的回显服务器和客户端代码)

目录 0.上篇文章 1.V1 版本 - echo server 1.1认识接口 1.2实现 V1 版本 - echo server&#xff08;细节&#xff09; 1.3添加的日志系统&#xff08;代码&#xff09; 1.4 解析网络地址 1.5 禁止拷贝逻辑&#xff08;基类&#xff09; 1.6 服务端逻辑 &#xff08;代码&…