【java-面试题】链表刷题

news2024/11/15 19:26:03

【java-面试题】链表刷题

  • 1. 删除链表中等于给定值 val 的所有节点(最多遍历链表一遍)
    • 题目
    • 思路
    • 代码
  • 2. 反转一个单链表(就地反转)

1. 删除链表中等于给定值 val 的所有节点(最多遍历链表一遍)

力扣链接:203.移除链表元素

题目

在这里插入图片描述

思路

  1. 遍历单链表中所有结点
  2. 遍历的同时把结点中的元素和val比较,
    • 和val相等,删除该结点后继续向后遍历
    • 和val不相等,继续向后遍历

要注意的是:

  1. 怎么删除结点:
    • 找到要删除结点的前驱
    • 连接要删除结点的前驱和后继:把要删除结点中存储的后继的地址存储到要删除结点的前驱中。

在这里插入图片描述在这里插入图片描述

  1. 遍历的同时还要确定前驱,这种情况如何遍历?

创建变量prev从一号结点开始遍历,创建变量cur从二号结点开始遍历。cur是当前结点,prev是当前结点的前驱。遍历结束后,再单独检查一号结点中元素是否与key相等。

  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) {
    //链表为空时
        if(head == null){
            return null;
        }
        ListNode prev = head;
        ListNode cur = head.next;//从第二个结点开始遍历
        while(cur != null){
            if(cur.val == val){
                prev.next = cur.next;
                cur = cur.next;
            }else{
                prev = prev.next;
                cur = cur.next;
            } 
        }
        if(head.val == val){
            head = head.next;//最后处理头结点
        }
        return head;
    }
}

2. 反转一个单链表(就地反转)

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

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

相关文章

仅仅4M!无缝、快速、安全的效率提升工具

在数字化的今天,文件传输已经成为我们日常生活中不可或缺的一部分。无论是工作汇报的PPT,还是那些珍贵的高清照片,我们都需要一个既快速又安全的方式去分享它们的同时,不受终端设备的影响,我们希望接收方不需要下载任何…

C++内存模型与内存序

写在前面 在真正了解Memory Order的作用之前,曾经简单地将Memory Order等同于mutex和atomic来进行线程间数据同步,或者用来限制线程间的执行顺序,其实这是一个错误的理解。直到后来仔细研究了Memory Order之后,才发现无论是功能还…

一文了解docker与k8s

随着 k8s 作为容器编排解决方案变得越来越流行,有些人开始拿 Docker 和 k8s 进行对比,不禁问道:Docker 不香吗? k8s 是 kubernetes 的缩写,8 代表中间的八个字符。 其实 Docker 和 k8s 并非直接的竞争对手两者相互依存…

前端学习第一天-html基础

达标要求 网页的形成过程 常用的浏览器及常见的浏览器内核 web 标准三层组成 什么是HTML 熟练掌握HTML文档结构 熟练掌握HTML常用标签 1. 初识web前端 Web前端是创建Web页面或App等前端界面呈现给用户的过程。 Web前端开发是从网页制作演变而来,早期网站主…

【Micropython基础】TCP客户端与服务器

文章目录 前言一、连接Wifi1.1 创建STA接口1.2 激活wifi接口1.3 连接WIFI1.4 判断WIFI是否连接1.5 连接WIFI总体代码 二、创建TCP 客户端2.1 创建套接字2.2 设置TCP服务器的ip地址和端口2.3 连接TCP服务器2.3 发送数据2.4 接收数据2.5 断开连接2.6 示例代码 三、TCP服务器的创建…

干货!Python获取字典元素

1.访问字典中的元素 第一种方式:通过key访问 dict1 {"name":"中国医生", "author":"刘伟强", "person":"张涵予"} print(dict1["author"]) # 刘伟强 # print(dict1["price"…

SpringBlade CVE-2022-27360 export-user SQL 注入漏洞分析

漏洞描述 SpringBlade是一个基于Spring Cloud和Spring Boot的开发框架,旨在简化和加速微服务架构的开发过程。它提供了一系列开箱即用的功能和组件,帮助开发人员快速构建高效可靠的微服务应用。该产品/api/blade-user/export-user接口存在SQL注入。 漏…

微信小程序(四十六)登入界面-进阶版

注释很详细,直接上代码 上一篇 此文使用了vant组件库,没有安装配置的可以参考此篇vant组件的安装与配置 新增内容: 1.手机号与验证码格式验证 2.验证码的网络申请和校验 wechat-http模块在好几篇以前已经讲了咋安装的,不记得的友…

检查链表是否有环,返回值为bool和从头节点进入环的第一个节点两种情况

题目1(不返回节点) 给定单链表,检查链表是否有环。 代码实现: bool IsCircle(List plist) {assert(plist ! NULL);if (plist NULL||plist->nextNULL)return false;Node* p plist->next;//慢指针,一次走一步Node* q pl…

Mysql-主从架构篇(一主多从,半同步案例搭建)

主从架构 主从架构有什么用? 通过搭建MySQL主从集群,可以缓解MySQL的数据存储以及访问的压力。 数据安全(主备):给主服务增加一个数据备份。基于这个目的,可以搭建主从架构,或者也可以基于主…

00x集—二维轻量多线段LWpolyline设置凸度bulge——vba实现

本文主要讲LightweightPolyline ,即轻量多段线。 LightweightPolyline (每一顶点用2个元素表示,数组大小必须为2的倍数)对象, 而对比polyline(每一顶点用三个元素表示,数组大小必须为3的倍数) 优化多段线(轻量多段线),由线和弧段组成的可调节…

第三十周:文献阅读

第三十周:综述阅读文献阅读pytorch学习 摘要Abstract1. 深度可分离卷积1.1 文献摘要1.2 引言1.3 Inception 模块1.4 Inception模块与深度可分离卷积的差别1.5 Xception架构1.6 实验1.7 总结1.8 创新点 摘要 深度可分离卷积是一种卷积神经网络(CNN&#…

【Linux】线程概念|线程理解|线程控制

文章目录 线程概念Linux中线程是否存在的讨论线程创建和线程控制线程的终止和等待(三种终止方式 pthread_join()的void**retval) 线程概念 线程就是进程内部的一个执行流,线程在进程内运行,线程在进程的地址空间内运行&#xff0…

【c++】继承深度解剖

> 作者简介:დ旧言~,目前大二,现在学习Java,c,c,Python等 > 座右铭:松树千年终是朽,槿花一日自为荣。 > 目标:了解什么事继承,基类和派生类的使用和…

启动CMD/powershell命令窗口时,设置默认的python虚拟环境 in window10

启动CMD/powershell命令窗口时,设置默认的python虚拟环境 in window10 本文有两个目的: CMD命令窗口, 设置默认启动的python环境PowerShell命令窗口, 设置默认启动的python环境 CMD命令窗口, 设置默认启动的python环…

企业计算机服务器中了360勒索病毒如何解密,360后缀勒索病毒处理流程

对于众多的企业来说,企业的数据是企业发展的核心,越来越多的企业开始注重企业的数据安全问题,但随着网络技术的不断发展与应用,网络黑客的攻击加密手段也在不断升级。近期,云天数据恢复中心接到多家企业的求助&#xf…

PDN分析及应用系列二-简单5V电源分配-Altium Designer仿真分析-AD

PDN分析及应用系列二 —— 案例1:简单5V电源分配 预模拟DC网络识别 当最初为PCB设计打开PDN分析仪时,它将尝试根据公共电源网络命名法从设计中识别所有直流电源网络。 正确的DC网络识别对于获得最准确的模拟结果非常重要。 在示例项目中已经识别出主DC网络以简化该过程。 …

人工智能之Tensorflow程序结构

TensorFlow作为分布式机器学习平台,主要架构如下: 网络层:远程过程调用(gRPC)和远程直接数据存取(RDMA)作为网络层,主要负责传递神经网络算法参数。 设备层:CPU、GPU等设备,主要负责神经网络算法中具体的运…

【旧文搬运】为你的 Laravel 应用添加一个基于 Swoole 的 WebSocket 服务

做了一个基于 Swoole 的 WebSocket 扩展包,可以用来做实时状态推送,或者自定义消息处理实现 im,有需要的可以看看: [giorgio-socket] 使用方法 安装 安装扩展包 composer require wu/giorgio-socket发布配置文件 php artisan vendor:pu…

可莉炸鱼

情况有s*k>n&#xff0c;最多炸鱼数为n s*k<n&#xff0c;最多炸鱼数为s*k 将s*k转化为k个s相加&#xff0c;每次结果与n比较 #include<iostream> #include<vector> #include<algorithm> using namespace std; #define endl \n #define ll long lon…