【链表Part01】| 203.移除链表元素、707.设计链表、206.反转链表

news2024/11/27 11:40:00

目录

✿LeetCode203.移除链表元素❀

✿LeetCode707.设计链表❀ 

✿LeetCode206.反转链表❀


✿LeetCode203.移除链表元素❀

链接:203.移除链表元素

给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。

 我的做法是设置一个虚拟头结点,因为头结点的处理与其他节点不同,设置了虚拟头结点,就可以把头结点看成一个普通的节点,移除操作只用把前一个节点的next指向当前节点的next,代码如下:

public ListNode removeElements(ListNode head, int val) {
        if(head==null){
            return null;
        }
        ListNode dummy=new ListNode();
        dummy.next=head;
        ListNode pre=dummy;
        ListNode cur=head;
        while(cur!=null){
            if(cur.val==val){
                pre.next=cur.next;
            }else{
                pre=cur;
            }
            cur=cur.next;
        }
        return dummy.next;
    }

测试用例:

1.输入一个含有值为val节点的链表

2.输入一个不含值为val节点的链表

3.输入一个只有值为val节点的链表

4.输入的只有头结点且值为val

5.输入的只有头结点且值不为val

6.输入空链表

✿LeetCode707.设计链表❀ 

链接:707.设计链表

你可以选择使用单链表或者双链表,设计并实现自己的链表。

单链表中的节点应该具备两个属性:val 和 next 。val 是当前节点的值,next 是指向下一个节点的指针/引用。

如果是双向链表,则还需要属性 prev 以指示链表中的上一个节点。假设链表中的所有节点下标从 0 开始。

实现 MyLinkedList 类:

  • MyLinkedList() 初始化 MyLinkedList 对象。
  • int get(int index) 获取链表中下标为 index 的节点的值。如果下标无效,则返回 -1 。
  • void addAtHead(int val) 将一个值为 val 的节点插入到链表中第一个元素之前。在插入完成后,新节点会成为链表的第一个节点。
  • void addAtTail(int val) 将一个值为 val 的节点追加到链表中作为链表的最后一个元素。
  • void addAtIndex(int index, int val) 将一个值为 val 的节点插入到链表中下标为 index 的节点之前。如果 index 等于链表的长度,那么该节点会被追加到链表的末尾。如果 index 比长度更大,该节点将 不会插入 到链表中。
  • void deleteAtIndex(int index) 如果下标有效,则删除链表中下标为 index 的节点。

 

 

此题非常考验对链表的操作,我做了蛮久的,也需要对链表有足够的了解,本题做的时候也充分体现了虚拟头结点的便利性,然后就是模拟链表的操作,以下是我的代码: 

class ListNode{
    int val;
    ListNode next;
    ListNode(){};
    ListNode(int val){
        this.val=val;
    }
}
public class MyLinkedList {
    int size;   //链表长度
    ListNode head;  //虚拟头结点

    // 初始化
    public MyLinkedList() {
        size=0;
        head=new ListNode();
    }
    // 获取元素
    public int get(int index) {
        if(index<0 || index>=size){
            return -1;
        }
        ListNode cur=head;
        for(int i=0;i<=index;i++){
            cur=cur.next;
        }
        return cur.val;
    }
    // 头插
    public void addAtHead(int val) {
        addAtIndex(0,val);
    }
    // 尾插
    public void addAtTail(int val) {
        addAtIndex(size,val);
    }
    // 插在index之前
    public void addAtIndex(int index, int val) {
        ListNode cur=head;
        if(index>size){
            return;
        }
        if(index<0){
            index=0;
        }
        for(int i=0;i<index;i++){
            cur=cur.next;
        }
        ListNode node=new ListNode(val);
        node.next=cur.next;
        cur.next=node;
        size++;
    }
    // 删除Index位置上的元素
    public void deleteAtIndex(int index) {
        if(index<0 || index>=size){
            return;
        }
//        if(index==0){
//            head=head.next;
//        }
        ListNode cur=head;
        for(int i=0;i<index;i++){
            cur=cur.next;
        }
        cur.next=cur.next.next;
        size--;
    }
}

✿LeetCode206.反转链表❀

链接:206.反转链表

给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。

 

 之前写过翻转数组,是用双指针解的,但是链表并不能直接获取到某个节点,所以翻转链表更考验对链表的操作,写链表题很容易就把自己绕进去,我建议可以在草稿纸上画一下,这样思路可以更清晰点(ps:我画的太乱了,就不粘上来了),以下是我的代码

public ListNode reverseList(ListNode head) {
        if(head==null || head.next==null){
            return head;
        }
        ListNode cur=head;
        ListNode pre=null;
        while(cur!=null){
            ListNode temp=cur.next;
            cur.next=pre;
            pre=cur;
            cur=temp;
        }
        return pre;
    }

 测试用例:

1.输入一个大于1个结点的链表

2.输入一个只有一个节点的链表

3.输入链表为空

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

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

相关文章

python数据分析

一、数据处理 1.爬取数据 我们将使用Python的requests和BeautifulSoup库来爬取数据。在这个示例中&#xff0c;我们将爬取豆瓣电影Top250的数据。 import requests from bs4 import BeautifulSoup url https://movie.douban.com/top250 headers {User-Agent: Mozilla/5.0 …

策略设计模式解读

目录 问题引进 鸭子问题 传统方案解决鸭子问题的分析和代码实现 传统的方式实现的问题分析和解决方案 策略模式基本介绍 基本介绍 策略模式的原理类图 策略模式解决鸭子问题 策略模式的注意事项和细节 问题引进 鸭子问题 编写鸭子项目&#xff0c;具体要求如下: 1) 有…

【GlobalMapper精品教程】059:基于las点云创建数字高程地形并二三维着色显示

本文讲述在globalmapper免费中文版中基于地形点云las数据创建数字高程地形、数字高程二三维联动可视化并进行数字高程着色显示。 文章目录 一、加载地形点云las数据二、创建数字高程地形三、数字高程二三维联动可视化四、数字高程着色显示相关阅读:ArcGIS实验教程——实验二十…

如何看待 Facebook 上线支付功能?

随着科技的不断进步&#xff0c;电子支付在我们的生活中变得越来越普遍。最近&#xff0c;Facebook宣布推出自己的支付功能&#xff0c;这引起了广泛的关注和讨论。作为世界上最大的社交媒体平台之一&#xff0c;Facebook进入支付领域的举措无疑具有重要意义。那么&#xff0c;…

Jetpack Compose:使用PagerIndicator和Infinity实现滚动的HorizontalPager

Jetpack Compose&#xff1a;使用PagerIndicator和Infinity实现滚动的HorizontalPager 可能你已经知道&#xff0c;Jetpack Compose 默认不包含内置的ViewPager组件。然而&#xff0c;我们可以通过在 build.gradle 文件中添加 accompanist 库依赖&#xff0c;将 ViewPager 功能…

有了这套方案,企业降本增效不再是纸上谈兵 (2)

一、生存压力逼近&#xff0c;企业如何应对经济下行残酷挑战&#xff1f; 当前市场经济下滑&#xff0c;客户预算紧缩和投资削减可能导致IT项目推迟或取消&#xff0c;从而直接影响公司收入和盈利能力。各大厂商都在陆续裁员或调整业务&#xff0c;以人力等成本为主的IT公司也必…

双塔模型dssm实践

最近在学习向量召回&#xff0c;向量召回不得不用到dssm双塔模型&#xff0c;双塔模型的原理非常简单&#xff0c;就是用两个任务塔&#xff0c;一个是query侧的query任务塔&#xff0c;另一个是doc侧的doc任务塔&#xff0c;任务塔向上抽象形成verctor隐向量后&#xff0c;用c…

【多同步挤压变换】基于多同步挤压变换处理时变信号和噪声信号研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

2022年国赛高教杯数学建模B题无人机遂行编队飞行中的纯方位无源定位解题全过程文档及程序

2022年国赛高教杯数学建模 B题 无人机遂行编队飞行中的纯方位无源定位 原题再现 无人机集群在遂行编队飞行时&#xff0c;为避免外界干扰&#xff0c;应尽可能保持电磁静默&#xff0c;少向外发射电磁波信号。为保持编队队形&#xff0c;拟采用纯方位无源定位的方法调整无人机…

win10录屏软件哪个好用?强烈推荐这3款!

案例&#xff1a;想要录制我的电脑屏幕&#xff0c;但是不知道如何选择合适的录屏工具&#xff0c;有没有好用的win10录屏软件&#xff1f; 【我想找一款好用的win10录屏工具&#xff0c;录制我的电脑屏幕&#xff0c;但是找了很久还没有找到&#xff0c;大家有好用的录屏软件…

Kibana:使用 Kibana 自带数据进行可视化(二)

在今天的练习中&#xff0c;我们将使用 Kibana 自带的数据来进行一些可视化的展示。希望对刚开始使用 Kibana 的用户有所帮助。这个是继上一篇文章 “Kibana&#xff1a;使用 Kibana 自带数据进行可视化&#xff08;一&#xff09;” 的续篇。 前提条件 如果你还没有安装好自己…

占据80%中国企业出海市场,亚马逊云科技如何为出海客户提供更多资源和附加值

亚马逊云科技就可以做到&#xff0c;作为占据80%中国企业出海市场的亚马逊云科技&#xff0c;其覆盖全球的业务体系&#xff0c;从亚马逊海外购、亚马逊全球开店、亚马逊智能硬件与服务&#xff0c;Amazon Alexa&#xff0c;Amazon Music都是属于亚马逊云科技“梦之队”的一员。…

【Android】WMS(二)Window的添加

软件盘相关模式 在 Android 应用开发中&#xff0c;软键盘的显示与隐藏是一个经常出现的问题&#xff0c;而 WindowManager 的 LayoutParams 中定义的软键盘相关模式则为开发者提供了一些解决方案。 其中&#xff0c;SoftInputMode 就是用于描述软键盘的显示方式和窗口的调整…

【LeetCode】HOT 100(6)

题单介绍&#xff1a; 精选 100 道力扣&#xff08;LeetCode&#xff09;上最热门的题目&#xff0c;适合初识算法与数据结构的新手和想要在短时间内高效提升的人&#xff0c;熟练掌握这 100 道题&#xff0c;你就已经具备了在代码世界通行的基本能力。 目录 题单介绍&#…

python包装与授权

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和…

ai聊天对话工具哪种好用?这些ai对话聊天工具不要错过

在如今信息爆炸的时代&#xff0c;人工智能技术正在逐渐渗透到我们的生活和工作中。ai对话聊天技术作为其中的一项重要应用&#xff0c;吸引了越来越多的关注。但是&#xff0c;ai对话聊天技术并不是万能的&#xff0c;它需要一定的技巧和策略才能真正发挥其价值。那么&#xf…

CAN总线转串口

一、CAN总线在工程机械中的广泛应用 随着科技的进步和现代施工项目大型化的要求,新一代工程机械需要实现集成化操作和智能控制。CAN总线是国际上应用最广泛的现场总线之一。CAN总线以其高可靠性、实时性、无破坏仲裁、多主等特性&#xff0c;已广泛应用于工程机械中&#xff0c…

这里推荐几个前端动画效果网站

1. AnimistaAnimista 是一个 CSS 动画/转场库和在线工具。它有许多现成的 CSS 动画片段可以直接使用,也可以在线定制动画。 网站地址:Animista - On-Demand CSS Animations Library 2. Animate.cssAnimate.css 是一个免费的 CSS 动画库,里面有 Attention Seekers 、 Bouncing E…

【Java|多线程与高并发】线程安全问题以及synchronized使用实例

文章目录 1. 前言2. 线程安全问题演示3.线程安全问题的原因4.synchronized关键字5. 总结 1. 前言 Java多线程环境下&#xff0c;多个线程同时访问共享资源时可能出现的数据竞争和不一致的情况。 线程安全一直都是一个令人头疼的问题.为了解决这个问题,Java为我们提供了很多方式…

MySQL为什么有了redolog还需要double write buffer?

MySQL为什么有了redolog还需要double write buffer&#xff1f; 问题 我们知道MySQL InnoDB引擎使用redolog作为异常容灾恢复的机制&#xff0c;当MySQL进程发生异常退出、机器断电等&#xff0c;在重新启动时&#xff0c;使用redolog恢复。 OK&#xff0c;redolog是被MySQL…