Java链表与递归:移除链表元素

Java

https://leetcode-cn.com/problems/remove-linked-list-elements/solution/javalian-biao-yu-di-gui-yi-chu-lian-biao-264p/

解题思路

两种结题方式,使用虚拟头节点或者不使用。

使用虚拟头节点简单易理解,从虚拟头节点开始,一个一个地看下一个元素,是目标元素则改动当前节点next指针跳过一下,并且重新检查下一个节点(存在下两个及以上节点都应该删除的情况),不是目标元素就将下一个节点变为目标节点,直到下一个目标节点为空。最后返回的是虚拟头节点next指向的真实头节点。

不使用头节点要分两种状态考虑,一个是头节点就是要删除的目标节点,另外一个是非头节点是要删除的节点,两种处理方式不一样,首先进来检查头节点,如果是要删除的节点,直接将head指向头节点的下一个节点以跳过来删除,之后再次检查头节点(存在开头两个及以上都应该删除的情况),直到当前头节点不应该被删除或者链表被删空了,然后接下来才检查除开头节点之外的节点是否要删除。在检查之前,因为上次退出循环有两个条件,不知道是哪个条件导致循环退出的,所以需要判断一下链表是不是空了(即头结点为空),是则直接返回空,不是再类似使用虚拟头结点的方式将头结点之后的元素逐一判断或删除。

代码

class Solution {
// 使用虚拟头结点解决
public ListNode dummyHead(ListNode head, int val) {
// 虚拟头节点
ListNode dummyHead = new ListNode();
dummyHead.next = head; ListNode cur = dummyHead;
while (cur.next!=null){
if(cur.next.val == val){
// ListNode delNode = cur.next;
// cur.next = cur.next.next;
// delNode.next = null;
// 内存自动回收,这样解决
cur.next = cur.next.next;
}else {
cur = cur.next;
}
}
// 返回头结点
return dummyHead.next;
} // 使用一般方法解决
public ListNode normal(ListNode head, int val) {
// 每次节点不能为空,可能删除一个就空了,下一个判断会空指针异常
while (head != null && head.val == val) {
// ListNode delNode = head;
// head = delNode.next;
// delNode.next = null;
// 自动内存处理,直接跳过就好
head = head.next;
} // 考虑到所有元素在头结点被删除
if (head == null) {
return null;
} for (ListNode cur = head; cur.next != null; ) {
// 如果指针的下一个节点是要被删除的
if (cur.next.val == val) {
// ListNode delNode = cur.next;
// cur.next = cur.next.next;
// delNode.next = null;
// 内存自动回收,直接跳过
cur.next = cur.next.next;
} else {
// 如果每次执行会跳过连续被删除的节点
cur = cur.next;
}
}
return head;
} public ListNode removeElements(ListNode head, int val) {
return dummyHead(head,val);
}
}

【数据结构与算法】Java链表与递归:移除链表元素的更多相关文章

  1. 数据结构与算法 java描述 第一章 算法及其复杂度

    目录 数据结构与算法 java描述 笔记 第一章 算法及其复杂度 算法的定义 算法性能的分析与评价 问题规模.运行时间及时间复杂度 渐进复杂度 大 O 记号 大Ω记号 Θ记号 空间复杂度 算法复杂度及 ...

  2. 数据结构与算法Java描述 队列

    package com.cjm.queue; /** * 数据结构与算法Java实现 队列 * * @author 小明 * */ public class Myqueue { private Nod ...

  3. Java实现 LeetCode 203 移除链表元素

    203. 移除链表元素 删除链表中等于给定值 val 的所有节点. 示例: 输入: 1->2->6->3->4->5->6, val = 6 输出: 1->2 ...

  4. 代码随想录训练营day 4|链表基础理论,移除链表元素,设计链表,反转链表

    链表理论基础 链表是一种由指针串联在一起的线性结构,每一个节点都由一个数据域和一个指针域组成. 链表的类型有:单链表.双链表.循环链表. 链表的存储方式:在内存中不连续分布. 链表的定义很多人因为不重 ...

  5. Java数据结构和算法(八)——递归

    记得小时候经常讲的一个故事:从前有座山,山上有座庙,庙里有一个老和尚和一个小和尚,一天,老和尚给小和尚讲了一个故事,故事内容是“从前有座山,山上有座庙,庙里有一个老和尚和一个小和尚,一天,老和尚给小和 ...

  6. 《Java数据结构与算法》笔记-CH5-链表-4用链表实现堆栈

    //用链表实现堆栈 /** * 节点类 */ class LinkS { private long data; public LinkS next; public LinkS(long d) { th ...

  7. 《Java数据结构与算法》笔记-CH5-链表-2单链表,增加根据关键字查找和删除

    /** * Link节点 有数据项和next指向下一个Link引用 */ class Link { private int iData;// 数据 private double dData;// 数据 ...

  8. 《Java数据结构与算法》笔记-CH5-链表-1单链表

    /** * Link节点 * 有数据项和next指向下一个Link引用 */ class Link { private int iData;//数据 private double dData;//数据 ...

  9. 8, java数据结构和算法: 从阶乘来看递归的调用

    直接上代码 public class RecursionDemo { //从阶乘看 递归的调用机制 public static void main(String[] args) { System.ou ...

  10. javascript实现数据结构与算法系列:功能完整的线性链表

    由于链表在空间的合理利用上和插入,删除时不需要移动等的有点,因此在很多场合下,它是线性表的首选存储结构.然而,它也存在着实现某些基本操作,如求线性表长度时不如顺序存储结构的缺点:另一方面,由于在链表中 ...

随机推荐

  1. Mysql身份认证过程

    背景 最近有一些hersql的用户希望能支持mysql的caching_sha2_password认证方式,caching_sha2_password与常用的mysql_native_password ...

  2. SpringSecurity详解

    认证+授权代码实现 Spring Security是 一种基于 Spring AOP 和 Servlet 过滤器的安全框架.它提供全面的安全性解决方案,同时在 Web 请求级和方法调用级处理身份确认和 ...

  3. 安装WindowsXP系统

    重点 1.虚拟磁盘类型必须选IDE,不然会找不到磁盘 2.下载地址:链接 ,提取码: 592u 3.可以将这个系统作成一个装机PE[大白菜] 4.安装成功后,调节分辨率时,安装VWmare Tool工 ...

  4. MySQL中联合主键的 in 查询

    就一句话: SELECT * from Projects WHERE (Prj,SubID) in (SELECT Prj,SubID FROM SP where stage='设计' and 负责人 ...

  5. 使用twinkle-tray快捷调整多个显示器的亮度

    前言 自从安装了这个小工具,我再也没用过笔记本键盘上的快捷键了~ 介绍 Twinkle Tray enables brightness control on external displays in ...

  6. 使用Hyper-V或者VM虚拟机安装部署Ubantu

    下载Ubantu iso文件 Server版下载 桌面版下载 我使用的是22.04.3版本,目前22.04最新版是22.04.5版本 22.04下载 一.Hyper-V方式 1.安装Hyper-V 参 ...

  7. zos静态网站托管的使用和原理

    本文分享自天翼云开发者社区<zos静态网站托管的使用和原理> 作者:Ywq zos静态网站托管是一种功能强大且方便的功能特性,此特性主要用于将静态网站的文件(例如HTML.CSS.Java ...

  8. Flask+flask-socketio+jsonrpc组合配置避坑

    Flask+flask-socketIO+jsonrpc这种组合能被我套出来也是离谱,事先声明:出现这种组合是因为本人之前对flask框架的使用仅限于flask+jsonrpc,所以导致这种情况出现, ...

  9. Django-Admin和第三方插件Xadmin

    Admin django内置了一个强大的组件叫Admin,提供给网站管理员快速开发运营后台的管理站点. 站点文档: https://docs.djangoproject.com/zh-hans/2.2 ...

  10. 普通人如何靠 AI 副业,1 个月实现月薪 3 万 +

    在物价飞涨.经济低迷的今天,仅靠死工资,却有着不固定的开销?房贷.车贷.孩子的教育费用-- 望着日益增长的开销,你是否也在夜深人静时,为钱包的羞涩而发愁?无数次幻想过拥有一份高收入的副业,却始终在迷茫 ...