数据结构 Java DS——链表部分经典题目 (1)

news2025/1/9 1:44:19

前言

笔者计划在暑假啃完JavaDS,Mysql的内容当然也会继续更

这次给读者们分享的是链表的几个比较典型的题目,关于如何手搓一个链表,笔者还在筹划中,

毕竟链表的种类也有那么多,但是在下面的题目中,只有单向链表

题目一 : 反转链表

206. 反转链表 - 力扣(LeetCode)

 很明显,想要反转一个链表,就要改变他们的地址域,具体是这样 改变的,将他们地址域的值由后一个节点的地址改为前一个节点的地址,同时注意,原head节点的 地址域应为NULL,因为反转以后,他就是最后一个节点了,因此,我们需要两个临时变量

具体写法如下

class Solution {
    public ListNode reverseList(ListNode head) {
  ListNode pre= null;
  ListNode cur=head;
  while(cur!=null)
  {
    ListNode nextnode=cur.next;
    cur.next=pre;
    pre=cur;
    cur=nextnode;
  }
  return pre;
}
}

 具体解释如下:

cur是头节点,没什么问题,pre负责的是存储上一个节点的地址,在反转以后,head节点的地址域是空的,所以pre也就是空的

在循环中,首先定义一个临时变量存储节点原本的地址,即下一个节点的位置

然后将上一个节点的位置(pre)存在地址域,然后将pre更新为当前节点的位置,然后cur变为nextnode;

为什么不直接cur=cur.next?  因为cur.next已经被更新了,需要有一个临时变量存原本的next;

这里的题目要求返回头节点,一般来说,反转也可以这么写

   public void reverseList()
    {
        Listnode pre=null;
        Listnode cur=head;
        while(cur!=null)
        {
            Listnode nextnode=cur.next;
            cur.next=pre;
            pre=cur;
            cur=nextnode;
        }
        this.head=pre;
    }

将pre设置为新的头以后,再通过display() 遍历

也可指定节点开始反转,只要把cur设置为指定节点即可; 

   public void reverseList( 指定节点 node)
    {
        Listnode pre=null;
        Listnode cur=node;
        while(cur!=null)
        {
            Listnode nextnode=cur.next;
            cur.next=pre;
            pre=cur;
            cur=nextnode;
        }
        this.head=pre;
    }

题目二 :移除链表元素

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

 想要移除这些节点,就要改变他们前一个节点的地址域,也就是说,把他们的地址域改成下一个节点的,直接跳过需要删除的元素

比如我画的示意图

 代码实现如下



class Solution {
    public ListNode removeElements(ListNode head, int val)
     {
        ListNode shaobing = new ListNode(0);
       shaobing.next = head;
        ListNode temp = shaobing;
        while(temp.next!=null)
        {
            if(temp.next.val==val)
            {
                temp.next= temp.next.next;
            }
            else
            {
                temp=temp.next;
            }
        }
        return shaobing.next;
}
}

这样也就搞定了

题目三: 链表的中间节点

876. 链表的中间结点 - 力扣(LeetCode)

 这个就是快慢指针的套路,快指针走两步,慢指针一步,然后找到中间节点

class Solution {
    public ListNode middleNode(ListNode head) {
        if (head == null) {
            return null;
        }
        ListNode slow = head;
        ListNode fast = head;
        // 快指针每次移动两步,慢指针每次移动一步
         while(fast!=null&& fast.next!=null)
         {
            slow=slow.next;
            fast=fast.next.next;
         }
         return slow;
    }
}

 条件就是 快指针的本身不为空,以及它的下一步不能为空

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

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

相关文章

文献笔记|综述|When Large Language Model Meets Optimization

When Large Language Model Meets Optimization 题目:当大型语言模型遇到优化时 作者:Sen Huang , Kaixiang Yang , Sheng Qi and Rui Wang 来源:arXiv 单位:华南理工大学 文章目录 When Large Language Model Meets Optimization…

java:字符缓冲流特有功能

BufferedWriter: void newLine():写一行行分隔符,行分隔符字符串由系统属性定义 BufferedReader: public String readLine():读一行文字,结果包含行的内容的字…

Mosh|初学者 SQL 教程

sql文件链接:链接: https://pan.baidu.com/s/1okjsgssdxMkfKf8FEos7DA?pwdf9a9 提取码: f9a9 在mysql workbench 导入 create_databases.sql 文件,下面是运行成功的界面 快捷方式:全部运行可以同时按下controlcommandenter ,或者…

rsync远程同步--累了,明天继续再写~。

rsync官网链接 rsync(Remote Sync,远程同步)开源快速备份工具,是一个用于本地和远程文件同步的Unix-like命令行程序。它使用“快速数据传输算法”,只发送源和目标之间的差异,因此数据传输非常高效。 可以在不同主机之间镜像同步整 个目录树…

基于网络编码的 tcp 变种-tcp/nc

tcp/nc 是指 “tcp with network coding”,是一种结合了网络编码技术的 tcp 变种,网上资源很少,我也不准备多介绍,只介绍它的核心。 传统 tcp 在演进过程中一直搞不定效率问题,网络带宽在增长,cpu 却没有变…

Python学习中使用循环(for, while)

在Python编程语言中,循环是一个非常重要的概念,可以帮助我们在代码中重复执行某些操作。Python支持两种主要的循环结构:for 循环和 while 循环。 1. for 循环 for 循环用于遍历一个序列(如列表、元组、字符串)或其他…

自动化数据集成的BI工具,为你提供决策洞察力

传统的商业智能(BI)报表系统采用的是“业务提报表需求,IT进行开发”的模式。决策管理者和业务人员提出用报表等来展示经营管理数据的需求;接着IT响应需求,进行需求沟通、数据处理加工、报表开发等主体工作;…

南方科技大学马永胜教授给年轻人使用AI工具上的建议

摘要 - 1. AI的未来,是机器人和机器人之间的合作; 2. 行业的发展方向是需求决定的,不要做同质化的发展,要做专/精/特/新; 3. 新质生产力 ( 科学技术革命性突破 生产要素创新型配置 产业深度转型升级&…

Text Control 控件教程:在 .NET 中打印 MS Word DOCX 文档

虽然有用于创建 DOCX 文件的库(例如 Open XML SDK),但打印又是另一回事。打印 DOCX 文件的唯一方法是在 Microsoft Word 中打开它并手动打印。对于需要打印大量文档的 Web 应用程序或需要自动打印文档的服务器端应用程序来说,这不…

CSS相对定位和绝对定位的区别

CSS相对定位和绝对定位的区别 区别1:相对的对象不同 相对定位是相对于自己绝对定位是相对于离自己最近的有定位的祖先 区别2:是否会脱离文档流 相对定位不会脱离文档流,不会影响其他元素的位置绝对定位会脱离文档流,会影响其他元素的布局 代…

人与机器的协同是强弱系统的互补行为

人与机器的协同可以被视作强弱系统的互补行为,这也强调了人类和机器之间在处理问题、执行任务或创造价值时各自的优势与角色。 人类在认知、创造力、情感和伦理等方面具有独特优势。我们能够进行高级的抽象思维、创新和复杂决策,能够处理不确定性和动态环…

realloc调整栈帧

同样的,也仅仅是记录自己学习的记录、思考。 优秀的学习文章 使用realloc函数来调整栈帧让one_gadget生效 | ZIKH26 调试分析 one_gadget失效 这种都需要自己动手调试来看 以经典的libc-2.23的fastbin attack为例 one_gadget libc-2.23.so edit(2,8,p64(mall…

怎样在 PostgreSQL 中优化对大数值类型数据的计算?

文章目录 一、选择合适的数据类型二、索引优化三、查询语句优化四、数据库配置调整五、使用扩展功能六、示例七、总结 在 PostgreSQL 中处理大数值类型数据(例如 BIGINT、NUMERIC 等)的计算时,可能会遇到性能瓶颈。为了优化这些计算&#xff…

coze搭建工作流和Agent

coze搭建工作流和Agent Agent LLM 记忆感知规划使用工具 LLM是大语言模型,prompt提示词影响LLM的输出质量 描述需求——>背景——>解决思路,提示词文档。 当有明确的需求和实现需求的路径时,可以通过搭建工作流来完成标准化任务为…

从零开始学习嵌入式----Linux系统命令集合与shell脚本

Shell是一门编程语言,作为学习shell的开始,需要事先搞明白:编程的目的是什么?什么是编程语言?什么是编程? shell本身就是一门解释型、弱类型、动态语言,与python相对应,Python属于解…

办公室卫生间厕位引导牌款式多样,都有哪些功能

在现代办公环境中,卫生间不仅是员工日常使用的必需设施,也是体现企业文化和管理水平的一面镜子。然而,传统办公室卫生间往往存在着信息不透明、高峰期拥挤、清洁维护滞后等问题,影响了员工的使用体验。近年来,随着智慧…

0基础学会在亚马逊云科技AWS上搭建生成式AI云原生Serverless问答QA机器人(含代码和步骤)

小李哥今天带大家继续学习在国际主流云计算平台亚马逊云科技AWS上开发生成式AI软件应用方案。上一篇文章我们为大家介绍了,如何在亚马逊云科技上利用Amazon SageMaker搭建、部署和测试开源模型Llama 7B。下面我将会带大家探索如何搭建高扩展性、高可用的完全托管云原…

个人标准流程管理系统

个人标准流程管理系统(Personal Standard Operating Procedure System, PSOPS)是一种帮助个人组织和优化日常任务、项目管理、学习计划和其他重复性活动的工具。它旨在提升个人效率,确保各项事务按照预设的标准流程执行。以下是设计这样一个系…

PPI(每英寸像素数)、DPI(每英寸点数)和Pixel(像素)的区别和联系?

一、定义 PPI、DPI和Pixel是图像处理、打印和显示领域中常用的三个概念,它们之间既有区别又有联系。以下是对这三个概念进行分别讲解: 1. PPI(Pixels Per Inch)-即每英寸像素数,是图像分辨率的一种表示方…

Apache部署与配置

概述 介绍 Apache HTTP Server(简称Apache)是Apache的一个开源的网页服务器,它源自NCSAhttpd服务器,并经过多次修改和发展,如今已经成为全球范围内广泛使用的Web服务器软件之一 特点 跨平台:可以运行在几乎所有广泛使用的计算机平…