首页 > 其他分享 >链表--移除链表元素--力扣203

链表--移除链表元素--力扣203

时间:2024-04-08 18:34:01浏览次数:19  
标签:head ListNode cur val -- next 链表 移除 节点

目录

题目

思路

代码

细节


题目

给你一个链表的头节点 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 输出:[]

思路

分为两种情况:1.被移除的是头元素       2.被移除的不是头元素

情况二较为简单,直接遍历找到要删除的元素,使要删除元素的前一个值的下一个元素直接等于要删除的后一个元素。

情况一的处理有两种方法

1.直接使用原来的链表来进行删除操作。

直接让链表中的头指针向后移动一格

2.设置一个虚拟头结点在进行删除操作。

在原来的头指针前面设置一个虚拟指针

代码

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {//这是不用虚拟头节点的方法
    public ListNode removeElements(ListNode head, int val) {
        while(head!=null&&head.val==val){//头节点的值不能为null,因为题中要取出头节点的值,这个情况就是要删除头节点的逻辑代码
//问题1:为什么这里用while而不是if?
head=head.next;
        }
ListNode curr=head;
while(curr!=null){
while(curr.next!=null&&curr.next.val==val){//这里要删除的节点的值也不能为null
curr.next=curr.next.next;
}
curr=curr.next;
}
return head;
    }
}


/*二
*/
public ListNode removeElements(ListNode head, int val) {
    while (head != null && head.val == val) {
        head = head.next;
    }
    // 已经为null,提前退出
    if (head == null) {
        return head;
    }
    // 已确定当前head.val != val
    ListNode pre = head;
    ListNode cur = head.next;
    while (cur != null) {
        if (cur.val == val) {
            pre.next = cur.next;
        } else {
            pre = cur;
        }
        cur = cur.next;
    }
    return head;
}
class Solution {//添加虚拟头节点的方式
    public ListNode removeElements(ListNode head, int val) {
       if (head == null) {//当头节点的值为null也就是说这个链表就是没有,提前返回
        return head;
    }
    // 因为删除可能涉及到头节点,所以设置dummy节点,统一操作
    ListNode dummy = new ListNode(-1, head);//因为原来头节点是0,所以这个是-1,遍历数组的时候从虚拟头节点遍历才能包含要删除的对象是头节点的情况
    ListNode pre = dummy;
    ListNode cur = head;
    while (cur != null) {//头节点的值不能为null
        if (cur.val == val) {//这个是删除头节点
            pre.next = cur.next;
        } else {
            pre = cur;
        }
        cur = cur.next;
    }
    return dummy.next;//返回头节点的值,也就是虚拟节点的后一个
}
}

细节

问题1:

假如这个链表是1 1 1 1 1 1,然后恰好要删除元素的值也为1,如果是if的话就进行一次,而我们需要的是一直删除,所以while更合适

标签:head,ListNode,cur,val,--,next,链表,移除,节点
From: https://blog.csdn.net/2301_80113113/article/details/137516103

相关文章

  • Prompt Perturbation in Retrieval-Augmented Generation based Large Language Model
    本文是LLM系列文章,针对《PromptPerturbationinRetrieval-AugmentedGenerationbasedLargeLanguageModels》的翻译。基于大语言模型的检索增强生成中的提示扰动摘要1引言2相关工作3梯度引导的提示扰动4对抗性前缀的检测5实验6结论摘要随着大型......
  • 几种获取免费SSL证书的方式
    自2018年七月开始,Chrome将所有未安装使用SSL证书的网站皆标记为“不安全”。在访问未安装部署SSL证书网站时经常会出现风险提示,而拥有SSL证书的网站在权重排名上会有一定提升。当然网站部署SSL证书最主要的意义还是在于网络安全防范和普及https,甚至于现在的小程序在应用过程......
  • 免费的PDF转换小程序,无广告、无限制
    网上的PDF转换工具其实也不少,但大多数都是收费的,要么广告一大堆。于是自己整了一个免费且没有广告的PDF转换小程序,主要的功能有:PDF转WordPDF转PPTPDF转ExcelPDF转图片PDF转文字Word转PDFPPT转PDFExcel转PDF图片转PDF网页转PDFPDF加水印PDF去水印PDF加密PDF压缩......
  • http免费升级https
    背景:首先我们需要了解HTTPS并不是一个全新的协议,而是在HTTP的基础上,通过SSL增加了一层加密协议,从而大大增加了HTTP协议的安全性。HTTPS主要由两部分组成:HTTP(超文本传输协议)+SSL/TLS(安全协议),也就是在HTTP上又加了一层处理加密信息的模块。目录背景:http的概念和......
  • yaml配置文件
    参考:https://blog.csdn.net/weixin_62221994/article/details/132612140一、YAML概述YAML全称是YAMLAin'tMarkupLanguage。YAML是一种直观的能够被电脑识别的的数据数据序列化格式,并且容易被人类阅读,容易和脚本语言交互的,可以被支持YAML库的不同的编程语言程序导入,比如:C......
  • Packet Tracer - 配置单臂路由器 VLAN 间,路由为交换机添加 V配置子接口,测试使用 VLA
    配置指令是下面以下均要进入特权模式enable以及全局模式configterminalS1S1(config)#vlan10S1(config-vlan)#vlan30S1(config-vlan)#exitS1(config)#intf0/11S1(config-if)#switchportmodeaccessS1(config-if)#switchportaccessvlan10S1(config-if)#int......
  • 申请IP地址证书
    IP证书,也被称为IPSSL证书,是一种特殊的SSL证书,不同于传统的域名验证(DV)证书,它是通过验证公网IP地址而不是域名来确保安全连接。这种证书用于保护IP地址,并在安装后起到加密作用。以下是关于IP证书的主要信息:IPSSL证书-JoySSL用途与优势:1.IP身份验证:允许对服务器进行身份验证......
  • 基于FPGA的数据采集、编码、通讯和存储系统设计(即FPGA+RTL8211千兆以太网+SD卡存储+RT
    介绍一个小项目,加强对FPGA相关接口的整体把握。硬件及软件代码梳理:硬件系统的主要功能框图,其中FPGA作为处理单元,实现了包括电流和电压的采集、千兆以太网通讯、SD卡本地数据存储和串口通讯等。已经过板级测试,测试包含:千兆网通讯收发测试、AD采集的数据验证、SD卡存储验证......
  • AHCI ---HBA Configuration Registers---PCI Header
    2.1PCIHeader下面表格是截取自AHCISpec,主要是介绍PCIheader的每个字段的具体含义,根据获取这个header的数据可以来解析这个HBA的具体的配置。不同字段的各个值的含义,可以参考AHCIspecHBAConfigurationRegisters章节。本文主要是介绍几个重要的字段。PCIHeade......
  • vscode为什么设置不了中文?
    VSCode中文插件安装在VSCode中设置中文的首要步骤是安装“Chinese(Simplified)LanguagePackforVisualStudioCode”扩展插件。这一过程十分简单,只需打开VSCode,进入扩展市场,搜索“Chinese(Simplified)LanguagePack”然后点击安装即可。安装完成后,需要通过命令面......