代码随想录算法训练营第三天| 链表理论基础, 203.移除链表元素,707.设计链表,206.反转链表

news2024/11/18 9:33:46

代码随想录算法训练营第三天| 链表理论基础, 203.移除链表元素,707.设计链表,206.反转链表

链表理论基础

建议:了解一下链接基础,以及链表和数组的区别 文章链接:

203.移除链表元素

建议: 本题最关键是要理解 虚拟头结点的使用技巧,这个对链表题目很重要。
题目链接/文章讲解/视频讲解
在这里插入图片描述

看到题目的第一想法:

由于链表的头结点可能就是我们需要删除的节点,因此设置一个虚拟头节点,对我来说更好处理。设置一个虚拟头节点preHead,当前节点的前一个节点pre,当前节点cur,如果cur的值等于val则pre.next = cur.next,cur = cur.next;由于java有垃圾处理机制,因此不需要像c++一样手动删除节点。如果cur的值与val不相等,则pre和cur指针往下走一位。

package com.second.day3;

public class ListNode {
    int val;
    ListNode next;

    public ListNode() {
    }

    public ListNode(int val) {
        this.val = val;
    }

    public ListNode(int val, ListNode next) {
        this.val = val;
        this.next = next;
    }
}

package com.second.day3;

public class RemoveElements_203 {
    public ListNode removeElements(ListNode head, int val) {
        //设置一个虚拟头结点
        ListNode preHead = new ListNode(-1);
        preHead.next = head;
        ListNode pre = preHead;  //当前节点的前一个节点
        ListNode cur = head;     //当前节点
        while(cur != null) {
            if(cur.val == val) {
                pre.next = cur.next;
                cur = cur.next;
            }
            else {
                pre = cur;
                cur = cur.next;
            }
        }
        return preHead.next;
    }
}

看完代码随想录之后的想法:

如果不设置虚拟头节点,那么头结点的删除需要单独处理,如何处理呢?就是把头结点向后移动一位即可,接下来的操作与设置虚拟头结点的操作一样。

自己实现过程中遇到哪些困难:

没有遇到问题。直接AC了,第一次写的小伙伴们可能不能一下写出来,但一直坚持下去就会有意想不到的结果。

707. 设计链表

建议: 这是一道考察 链表综合操作的题目,不算容易,可以练一练 使用虚拟头结点
题目链接/文章讲解/视频讲解:
在这里插入图片描述

看到题目的第一想法:

看到这个题目后,我记得我第一次写的时候,完全看不懂题目。今天做的时候也是看不太懂,果然写代码的时候还是看了点卡哥代码。
我没看懂题目有:
1.该链表设计是基于单链表或者是双链表的。
2.该链表节点的第一个节点是0号节点。
经过自己的努力在不看卡哥主要代码下AC了

package com.second.day3;

public class MyLinkedList {
    int size;
    ListNode head;

    public MyLinkedList() {
        size = 0;
        head = new ListNode(0);
    }

    public int get(int index) {
        if(index >= size || index < 0)
            return -1;
        ListNode curNode = head.next;
        for(int i = 0; i < index; i++) {
            curNode = curNode.next;
        }
        return curNode.val;
    }

    public void addAtHead(int val) {
        addAtIndex(0, val);
    }

    public void addAtTail(int val) {
        addAtIndex(size, val);
    }

    public void addAtIndex(int index, int val) {
        //如果 index 大于链表长度,则不会插入节点。
        if(index > size)
            return;
        ListNode newNode = new ListNode(val);
        ListNode preNode = head;
        ListNode curNode = head.next;
        //如果index小于0,则在头部插入节点。
        if(index < 0) {
            preNode.next = newNode;
            newNode.next = curNode;
        }
        //如果 index 等于链表的长度,则该节点将附加到链表的末尾。
        if(index == size) {
            for(int i = 0; i < size; i++) {
                preNode = preNode.next;
            }
            preNode.next = newNode;
        }
        //如果 index 在[0, size - 1]
        if(index >= 0 && index < size) {
            for(int i = 0; i < index; i++) {
                preNode = curNode;
                curNode = curNode.next;
            }
            preNode.next = newNode;
            newNode.next = curNode;
        }
        size += 1;
    }

    public void deleteAtIndex(int index) {
        if(index < 0 || index >= size)
            return;
        ListNode preNode = head;
        ListNode curNode = head.next;
        for(int i = 0; i < index; i++) {
            preNode = curNode;
            curNode = curNode.next;
        }
        preNode.next = curNode.next;
        size -= 1;
    }

    public static void main(String[] args) {
        MyLinkedList linkedList = new MyLinkedList();
        linkedList.addAtHead(1);
        linkedList.addAtTail(3);
        linkedList.addAtIndex(1,2);   //链表变为1-> 2-> 3
        linkedList.get(1);            //返回2
        linkedList.deleteAtIndex(1);  //现在链表是1-> 3
        linkedList.get(1);
    }
}

看完代码随想录之后的想法:

我觉得我和卡哥代码差不多,但其双链表的实现还没弄明白,今天需要找个时间弄明白。

自己实现过程中遇到哪些困难:

不知道如何初始化链表,其次初始化链表的head其实是虚拟头结点。

206.反转链表

建议先看我的视频讲解,视频讲解中对 反转链表需要注意的点讲的很清晰了,看完之后大家的疑惑基本都解决了。
题目链接/文章讲解/视频讲解:
在这里插入图片描述

看到题目的第一想法:

在这里插入图片描述
pre:指向当前节点的前一个节点,初始值为null
cur:指向当前节点
temp:遍历过程中暂时保存cur的下一个节点
最好写代码之前手动画下图,会让自己的思路变得清晰。

package com.second.day3;

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

看完代码随想录之后的想法:

尝试了一下递归法,对递归法有了点了解

自己实现过程中遇到哪些困难:

没有困难,哈哈哈哈

今日收获,记录一下自己的学习时长:

今天写了四个题:
203.移除链表元素,707.设计链表,206.反转链表,1005. K 次取反后最大化的数组和
代码:1.5h
博客:1h
不积跬步无以至千里,不积小流无以成江海。继续努力。

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

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

相关文章

智源社区AI周刊No.109:ChatGPT预示大模型取代搜索引擎;Stable Diffusion2.1发布,8k高清图像生成...

汇聚每周AI热点&#xff0c;不错过重要资讯&#xff01;欢迎扫码&#xff0c;关注并订阅智源社区AI周刊。ChatGPT火出圈&#xff1a;对话大模型驱动新型搜索范式诞生&#xff0c;或将取代搜索引擎火出圈的ChatGPT注册用户数量已超过五百万&#xff0c;无疑是2022年最火的AI模型…

ReactNative MacOS环境初始化项目(安卓)

MacOS 12.6.1 官方文档 英文 https://reactnative.dev/docs/environment-setup中文 https://www.react-native.cn/docs/environment-setup 相关文档 ReactNative MacOS环境初始化项目(ios)OpenJDK 与 AdoptOpenJDK 的区别 安装步骤 安装Homebrew - /bin/zsh -c "$(curl -f…

spring学习记录(七)

Spring中对象分类 Spring是一个功能强大的容器&#xff0c;容器中存储的是一个一个的对象&#xff0c;容器中的对象分为&#xff1a; 简单对象复杂对象 简单对象就是可以通过构造器直接new 出来的对象&#xff1b; 复杂对象是不可以直接通过构造器直接new出来的对象。 无论是…

[附源码]Python计算机毕业设计SSM基于课程群的实验管理平台(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Java中异常处理方式

文章目录针对异常的处理主要有两种方式&#xff1a;1.抛出异常2.try catch 捕获异常三道经典异常处理代码题针对异常的处理主要有两种方式&#xff1a; 1.抛出异常 遇到异常不进行具体处理&#xff0c;而是继续抛给调用者&#xff08;throw&#xff0c;throws&#xff09;抛出…

java8新特性之toMap的用法——全网独一无二的通俗易懂的讲解

对于java8的新特性toMap方法&#xff0c;相信有很多人都在工作中用过&#xff0c;接下来就通俗易懂的讲解一下toMap吧 先来看看官网对于toMap方法的解释 toMap有个三个重载的方法&#xff0c;每一个重载方法的详解分别如下 &#xff08;1&#xff09;方法1&#xff1a;两个参…

SpringBoot整合kafka到底怎么使用? (简单案例介绍——存放104协议解析报文信息)

前言 由于业务要求&#xff0c;我需要将104协议的报文内容解析后传到kafka里&#xff0c;然后程序也是一个SpringBoot项目&#xff0c;所以本篇文章我想说一说我是如何将那些数据传到kafka中并判断其是否消费&#xff0c;至于104协议的报文内容的解析和通信在此不去介绍&#…

【javassist】javassist 入门案例 生成类

1.概述 前面介绍的ASM入门门槛还是挺高的,需要跟底层的字节码指令打交道,优点是小巧、性能好。Javassist是一个性能比ASM稍差但使用起来简单很多的字节码操作库,不需要使用者掌握字节码指令,由东京工业大学的数学和计算机科学系的教授Shigeru Chiba开发。 本节将分为两个…

2022卡塔尔世界杯。CSDN世界杯勋章来啦

卡塔尔世界杯正在如火如茶的举办着&#xff0c;在比赛场上&#xff0c;我看到了来自世界各地的球队&#xff0c;他们都充满活力&#xff0c;充满激情&#xff0c;每一支球队都在努力的拼搏&#xff0c;无论是为了胜利&#xff0c;还是为了荣誉。我看到了一支支优秀的球队&#…

前端分页处理

页面中实现的分页效果&#xff0c;要么后端提供接口&#xff0c;每次点击下一页就调用接口&#xff0c;若不提供接口&#xff0c;分页得前端自己去截取。 方法一&#xff1a;slice方法 slice(参数1&#xff0c;参数2)方法是返回一个新的数组对象&#xff0c;左开右闭 参数1&…

Mel spectrum梅尔频谱与MFCCs

梅尔频谱和梅尔倒谱MFCCs是使用非常广泛的声音特征形式。 1.Mel-spectrogram梅尔语谱图 机器学习的第一步都是要提取出相应的特征(feature)&#xff0c;如果输入数据是图片&#xff0c;例如28*28的图片&#xff0c;那么只需要把每个像素(pixel)作为特征&#xff0c;对应的像素…

【数据结构】链表定义及其常用的基本操作(C/C++)

目录 ●图示 ●链表类型定义 ●常用的基本操作&#xff08;单链表&#xff09; ●简单案例 ●图示 ●链表类型定义 1.单链表存储结构的定义 typedef struct lnode{elemtype data;struct lnode *next; }lnode,*linklist; 定义链表L&#xff1a;linklist &L&#x…

Windows系统服务器如何架设网站

Windows系统服务器如何架设网站 架设网站我们的需服务器必须要有iis功能&#xff0c;我们随便找个网站素材进行搭建 大家跟着我的步骤操作就可以啦 下面我们以Windows server 2008系统为例 右键我的电脑----管理-----角色-----web服务器&#xff08;iis&#xff09; Internet信…

值得一看!从0编写一份PID控制代码

【推荐阅读】 浅析linux 系统进程冻结&#xff08;freezing of task&#xff09; 深入linux内核架构--进程&线程 纯干货&#xff0c;linux内存管理——内存管理架构&#xff08;建议收藏&#xff09; 轻松学会linux下查看内存频率,内核函数,cpu频率 概述Linux内核驱动之GPI…

Servlet与表单、数据库综合项目实战【学生信息管理】

✅作者简介&#xff1a;热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏&#xff1a;JAVA开发者…

开关电源环路稳定性分析(07)——电压型补偿网络

大家好&#xff0c;这里是大话硬件。 在前面的文章中&#xff0c;已经分析了控制级和功率级的传递函数&#xff0c;这一节咱们来分析反馈级的传递函数。 在分析反馈网络的传递函数之前&#xff0c;我想&#xff0c;应该有几个问题需要做一下介绍。 1. 功率级和控制级传递函数…

游戏开发41课 unity shader 优化

Shader有专门语言用来编写&#xff0c;常见类型有DirectX的HLSL&#xff0c;OpenGL的GLSL以及NVIDIA的Cg&#xff0c;为了优化shader代码&#xff0c;我们需要知道代码从被编写到被执行的流程&#xff0c;知道什么样的代码是不好的。 注意点&#xff1a; 避免if、switch分支语…

关于前端低代码的一些个人观点

2022&#xff0c;低代码彻底火了&#xff0c;甚至火到没有点相关经验&#xff0c;都不好意思出去面试的程度&#xff0c;堪称lowcode“元年”。在整个互联网大裁员的背景下&#xff0c;无论你是否相信它是降本提效的利器&#xff0c;彷佛都不重要了。因为行业趋势总是这般浩浩荡…

为什么其他地方的智能网联汽车产业都跟着北京模式走?

随着新一轮科技革命和产业变革加速演进&#xff0c;智能网联汽车已成为全球汽车产业发展的战略方向&#xff0c;是全球大国竞争的重要科技和产业领域。在技术路线层面&#xff0c;我国率先提出车路云融合的智能网联汽车“中国方案”&#xff0c;该路线已逐步成为国际共识。在产…

大学生端午节网页作业制作 学生端午节日网页设计模板 传统文化节日端午节静态网页成品代码下载 端午节日网页设计作品

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…