203.移除链表元素(力扣LeetCode)

文章目录

  • 203.移除链表元素
    • 题目描述
    • 原链表删除元素
    • 虚拟头节点

203.移除链表元素

题目描述

给你一个链表的头节点 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

原链表删除元素

class Solution {
public:ListNode* removeElements(ListNode* head, int val) {// 删除头结点while(head!=NULL&&head->val==val)//注意这里不是if ,因为可能需要删除的头结点不止一个{//使用 tmp 指针的好处是,在修改链表结构之前,它保存了对被删除节点的引用,这样我们就可以先调整链表的指针,然后安全地释放被删除节点的内存,避免内存泄漏。ListNode* tmp=head;head=head->next;delete tmp; }// 删除非头结点ListNode* cur=head;//cur作用:cur起链表中遍历作用, 提供了一种连接链表的 "前" 和 "后" 的方法,让我们在不丢失链表其他部分的情况下删除特定的节点。//如果不使用cur,使用head,在head=head->next中你会发现把头节点删了while(cur!=NULL&&cur->next!=NULL){if(cur->next->val==val){ListNode* tmp=cur->next;cur->next=cur->next->next;delete tmp;}else cur=cur->next;}return head;}
};

虚拟头节点

class Solution {
public:ListNode* removeElements(ListNode* head, int val) {//在C++中,new 关键字的作用是动态分配内存。它从自由存储区(通常是堆,与栈相对)上为对象或数组分配内存,并返回一个指向该内存的指针。当你创建一个对象时,new 会调用对象的构造函数来初始化这块内存。//内存分配:new ListNode(0) 请求系统从堆中分配足够存储一个 ListNode 对象的内存。//对象构造:在为 ListNode 对象分配内存后,new 调用 ListNode 类的构造函数,使用提供的参数 0 来初始化对象。这意味着创建的 ListNode 对象的值将被设置为 0。//返回指针:操作完成后,new 返回指向新分配和构造的 ListNode 对象的指针。这个指针然后被存储在变量 dummyhead 中。ListNode* dummyhead=new ListNode(0);dummyhead->next=head;ListNode* cur=dummyhead;while(cur!=NULL&&cur->next!=NULL){if(cur->next->val==val){ListNode* tmp=cur->next;cur->next=cur->next->next;delete tmp;}else cur=cur->next;}//这里返回的是虚拟头节点的下一个,而不是原来的头节点,因为原来的头节点可能被删了return dummyhead->next;//如果想要使用内存更加小,可以把虚拟头节点删了/*head=dummyhead->next;delete dummyhead;return head;*/}
};

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

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

相关文章

Ubuntu20.04添加桌面启动、侧边栏启动和终端启动

桌面启动 新建XX.desktop文件 在桌面新建一个XX.desktop文件&#xff0c;以QtCreator为例。 &#xff08;注意这里不能使用sudo&#xff0c;因为这样会把文件的权限归为root&#xff0c;导致后续设置可执行程序不方便&#xff09; gedit qtcreator.desktop在XX.desktop文件中…

【DeepLearning-9】YOLOv5模型网络结构中加入MobileViT模块

一、神经网络的前中后期 在神经网络中&#xff0c;特别是在深度卷积神经网络&#xff08;CNN&#xff09;中&#xff0c;“网络早期&#xff08;低层&#xff09;”、“网络中期&#xff08;中层&#xff09;”和“网络后期&#xff08;高层&#xff09;”通常指的是网络结构中…

【云原生】初识Docker,安装以及了解操作命令

一、为什么要使用容器&#xff1f; 背景&#xff1a;以前开发、测试、生产为不同的环境&#xff0c;痛点是发现开发测试以后没问题&#xff0c;但是在生产环境无法运行。给测试、开发、运维人员造成了大量的工作。最终结果是发版更新速度也跟不上&#xff0c;效率低 我认为使…

JAVA 学习 面试(十)枚举、注解、基本原则

枚举 默认继承 java.lang.Enum 类&#xff0c;不能继承其他父类&#xff0c;并自动添加了values&#xff08;获取枚举类中的所有枚举值&#xff09;和valueOf&#xff08;获取对应的枚举类型&#xff09;方法&#xff0c; java.lang.Enum 类实现了 java.lang.Serializable 和 …

翻译: GPT-4 with Vision 升级 Streamlit 应用程序的 7 种方式二

GPT-4 Vision 系列: 翻译: GPT-4 with Vision 升级 Streamlit 应用程序的 7 种方式一 GPT-4 Vision 的 7 个实际用例 Pre-requisites:先决条件&#xff1a; 订阅 ChatGPT Plus 以访问 GPT-4 Vision。如果您不熟悉 Streamlit&#xff0c;请按照安装步骤操作。 1. 绘制您的应…

C++面试:二叉树和红黑树

目录 二叉树 1. 二叉树的定义 2. 二叉树的遍历 3. 二叉树的应用 4. 实现细节 5. C中的实现 面试准备 红黑树 红黑树的原理 红黑树的用途 示例代码 面试准备 1. 红黑树的工作原理及其规则 2. 红黑树的优势及与其他二叉搜索树&#xff08;如AVL树&#xff09;的比较…

尚无忧球馆助教系统源码,助教小程序源码,助教源码,陪练系统源码

特色功能&#xff1a; 不同助教服务类型选择 助教申请&#xff0c;接单&#xff0c;陪练师入住&#xff0c;赚取外快 线下场馆入住 设置自己服务 城市代理 分销商入住 优惠券 技术栈&#xff1a;前端uniapp后端thinkphp 独立全开源

.NET高级面试指南专题一【委托和事件】

在C#中&#xff0c;委托&#xff08;Delegate&#xff09;和事件&#xff08;Event&#xff09;是两个重要的概念&#xff0c;它们通常用于实现事件驱动编程和回调机制。 委托定义&#xff1a; 委托是一个类&#xff0c;它定义了方法的类型&#xff0c;使得可以将方法当作另一个…

pyqt添加菜单栏

参考&#xff1a; https://blog.csdn.net/seniorwizard/article/details/109820641 import sys from PyQt5 import QtCore, QtGui, QtWidgets from PyQt5.QtCore import Qt from PyQt5.QtWidgets import (QApplication, QMainWindow, QMenuBar, QMenu, QAction, QPlainTextEdi…

HarmonyOS鸿蒙ArkTS,封装http网络请求

HarmonyOS鸿蒙ArkTS&#xff0c;封装http网络请求 前提&#xff1a; 要想使用http请求&#xff0c;系统必须要具备ohos.permission.INTERNET权限&#xff0c;在model.json5文件中的module模块下添加如下请求权限&#xff1a; 在module.json5文件中 配置 "requestPermi…

踩坑(6)Redisson调用unlockAsync方法释放锁失败

问题描述 通过redisson的lockAsync异步方法获取到锁之后&#xff0c;再业务执行完成后调用lock.unlockAsync()无法释放当前锁&#xff0c;导致后续的方法被阻塞 public void asyncLock() {RLock lock redissonClient.getLock("asyncLock");RFuture<Void> fut…

LeetCode 热题 100 | 矩阵

目录 1 73. 矩阵置零 2 54. 螺旋矩阵 3 48. 旋转图像 4 240. 搜索二维矩阵 II 菜鸟做题第二周&#xff0c;语言是 C 1 73. 矩阵置零 解题思路&#xff1a; 遍历矩阵&#xff0c;寻找等于 0 的元素&#xff0c;记录对应的行和列将被记录的行的元素全部置 0将被记录的…

k8s 进阶实战笔记 | Scheduler 调度策略总结

文章目录 Scheduler 调度策略总结调度原理和过程调度策略nodeSelect亲和性和反亲和性NodeAffinify亲和验证PodAffinity 亲和验证PodAntiAffinity 反亲和验证污点与容忍跳过 Scheduler 调度策略 调度策略场景总结 Scheduler 调度策略总结 调度原理和过程 Scheduler 一直监听着…

k8s Ingress部署应用

Deployment(部署) Deployment处于master节点&#xff0c;master会选择合适的work节点创建Container Container会被包含在Pod中 通过k8s部署一个nginx kubectl create deployment my-nginx --imagenginx创建一个tomcat 镜像 创建一个tomcat-svc.yaml文件 创建service类型…

【心得】java JNDI配合RMI实现注入个人笔记

目录 JNDI RMI 基本概念 RMI 基本逻辑 恶意利用 JNDI注入RMI实现攻击 JNDI Java Naming and Directory Interface Java 命令和目录接口 让配置参数 和 代码 解耦的规范或者思想 低耦合 高内聚 Name 命名 java对象 通过 命名 绑定到 容器环境 java对象和一个特定的…

Java技术栈 —— Kafka入门(一)

Java技术栈 —— Kafka入门&#xff08;一&#xff09; 一、什么是Kafka&#xff1f;二、如何安装Kafka&#xff1f; 一、什么是Kafka&#xff1f; Kafka是一种消息队列&#xff0c;通过订阅-发布机制可以实现解耦合&#xff0c;用异步处理代替同步处理[1] 。&#xff08;理解这…

REVIT二次开发万能刷

将这两个参数赋予其他参数 步骤2 将来做个可以调控的版本 using System; using System.Collections.Generic; using System.Lin

如何把word檔案自動化

1.安裝 pip install jojo-office ( 安裝這個) 2.讀取表格內容與文章內容&#xff0c;範例如下 import office from docx import Document replace{“{user_name}”:“陳彥甫”, “{tele}”:“0912882881”} docDocument(“template.docx”) tabledoc.tables[0] print(“ii:”…

《Python 简易速速上手小册》第7章:高级 Python 编程(基于最新版 Python3.12 编写)

注意&#xff1a;本《Python 简易速速上手小册》 核心目的在于让零基础新手「快速构建 Python 知识体系」 文章目录 <mark >注意&#xff1a;本《Python 简易速速上手小册》<mark >核心目的在于让零基础新手「快速构建 Python 知识体系」 7.1 装饰器和闭包7.1.1 装…

华为机考入门python3--(4)牛客4-字符串分隔

分类&#xff1a;字符串 知识点&#xff1a; 复制符号* 复制3个0 0*3 000 字符串截取 截取第i位到j-1位 str[i:j] 题目来自【牛客】 input_str input().strip()# 先补齐 if len(input_str) % 8 ! 0: input_str 0 * (8 - len(input_str) % 8) # 每8个分 out…