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

news2024/9/29 13:23:40

链表是一种通过指针串联在一起的线性结构,

单链表

单链表每一个节点由两部分组成,一个是数据域一个是指针域(存放指向下一个节点的指针),最后一个节点的指针域指向null(空指针的意思)。

双链表

双链表:每一个节点有两个指针域,一个指向下一个节点,一个指向上一个节点。

循环链表

循环链表,顾名思义,就是链表首尾相连。

循环链表可以用来解决约瑟夫环问题。

链表的存储方式

数组是在内存中是连续分布的,但是链表在内存中可不是连续分布的。链表是通过指针域的指针链接在内存中各个节点。

所以链表中的节点在内存中不是连续分布的 ,而是散乱分布在内存中的某地址上,分配机制取决于操作系统的内存管理

再把链表的特性和数组的特性进行一个对比,如图所示:

链表-链表与数据性能对比

 

 

 203.移除链表元素  

移除链表节点,过程中因为没有考虑到头节点也可能是要被删除的元素,因此需要哑节点dummy

class Solution {
    public ListNode removeElements(ListNode head, int val) {
        ListNode dummy=new ListNode(-1,head);//因为要考虑到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;
    }
}

 707.设计链表  

4天前刷过,今天依旧懵逼

这道题今天踩的坑是

1.在get()方法时,for循环的条件是i<=index,而不是i<index

2.在delete方法时,用了虚拟节点把自己绕糊涂了,要注意的是每次for循环结束时,节点temp指向的是不是要被删除的节点,这里显然for循环结束时,temp指向的是要被删除节点的前一个

//单链表
class MyLinkedList {
     LinkedNode head;
    int size;

    public MyLinkedList() {        
       head=new LinkedNode(0);
       size=0;
    }
   
    public int get(int index) {
        if(index<0||index>=size){return -1;} 
        LinkedNode temp=head;
        for(int i=0;i<=index;i++){//注意这里的<=
            temp=temp.next;
        }
        return temp.val;//temp指向的是
    }
    
    public void addAtHead(int val) {
        addAtIndex(0,val);
    }
    
    public void addAtTail(int val) {
         addAtIndex(size,val);
    }
    
    public void addAtIndex(int index, int val) {
        if(index>size){return ;} 
        index=Math.max(0,index);

        size++;
        LinkedNode newnode=new LinkedNode(val);
        LinkedNode temp=head;
        for(int i=0;i<index;i++){
            temp=temp.next;
        }
        //temp.next就是新节点的位置
        newnode.next=temp.next;
        temp.next=newnode;
    }
    
    public void deleteAtIndex(int index) {
        if(index<0||index>=size){return ;} 
        size--;
        LinkedNode temp=head;
        for(int i=0;i<index;i++){
             temp=temp.next;
         }
        //结束for循环后,temp指向的是要被删除节点的前一个节点
          
            temp.next = temp.next.next;
    }
}

class LinkedNode{
    int val;
    LinkedNode next;
    public LinkedNode(int val){
        this.val=val;
    }
}

/**
 * Your MyLinkedList object will be instantiated and called as such:
 * MyLinkedList obj = new MyLinkedList();
 * int param_1 = obj.get(index);
 * obj.addAtHead(val);
 * obj.addAtTail(val);
 * obj.addAtIndex(index,val);
 * obj.deleteAtIndex(index);
 */

 206.反转链表 

之前做过,今天写的很顺,

主要是要有一个预节点pre,每次将cur节点指向pre,然后将cur和pre节点后移动

当初是看这张图才明白的 

class Solution {
    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;

    }
}

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

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

相关文章

搭建JMeter+Jenkins+Ant持续化

在D盘下新建文件夹Test,在其中填充文件夹 在 ant中解压 “apache-ant-1.9.14-bin.zip” 在TestAudo中新建文件夹 进入pc文件夹继续新建文件夹并把准备好的build.xml拖入 在resultlog中新建两个空文件夹 名称分为 html jtl 把准备好的baidu.jmx放入script 配置环境变量 在环…

2023跨境电商有哪些热门的夏季选品类目?纯干货!快戳进来

1、厨房用品 夏季食材新鲜多样&#xff0c;所以厨房用品非常受欢迎。 冷水壶、冰桶、冰箱收纳盒等可帮助保持食材新鲜&#xff1b;烤肉架、烤盘、烤架、烤盘套装等是户外烧烤时的好帮手刨冰机、果汁机、冰淇淋机等可以制作各种冰凉饮品和甜品。 2、客厅用品 夏季在家放松休息&a…

数据结构—数组和广义表

4.2数组 数组&#xff1a;按一定格式排列起来的&#xff0c;具有相同类型的数据元素的集合。 **一维数组&#xff1a;**若线性表中的数据元素为非结果的简单元素&#xff0c;则称为一维数组。 **一维数组的逻辑结构&#xff1a;**线性结构&#xff0c;定长的线性表。 **声明…

婴儿床出口欧盟CE认证EN 1130办理指南

随着人们生活水平的不断提高&#xff0c;妈妈们对婴儿产品的要求也越来越高。作为新生儿最常用的家具之一&#xff0c;婴儿床的质量安全自然成为了消费者关注的焦点。而欧盟CE认证EN 1130就是婴儿床出口欧盟市场的必备证书&#xff0c;下面我们就来详细介绍一下该认证的办理流程…

C++网络编程 TCP套接字基础知识,利用TCP套接字实现客户端-服务端通信

1. TCP 套接字编程流程 1.1 概念 流式套接字编程针对TCP协议通信&#xff0c;即是面向对象的通信&#xff0c;分为服务端和客户端两部分。 1.2 服务端编程流程&#xff1a; 1&#xff09;加载套接字库&#xff08;使用函数WSAStartup()&#xff09;&#xff0c;创建套接字&…

ORB特征笔记

简介 ORB Oriented FAST Rotated BRIEF 前面的Oriented FAST说明的是它的关键点的选取是一种改良过的FAST&#xff0c;在FAST的基础上加了方向信息&#xff1b;后面的Rotated BRIEF是指特征描述符使用BRIEF描述子&#xff08;Binary Robust Independent Elementary Featur…

赋能医院数字化转型,医院拍摄VR全景很有必要

医院有没有必要拍摄制作VR全景呢&#xff1f;近期也有合作商问我们这个问题&#xff0c;其实VR智慧医院是趋势、也是机遇。现在外面很多的口腔医院、医美机构等都开始引入VR全景技术了&#xff0c;力求打造沉浸式、交互式的VR智慧医院新体验&#xff0c;通过VR全景展示技术来助…

c# 此程序集中已使用了资源标识符

严重性 代码 说明 项目 文件 行 禁止显示状态 错误 CS1508 此程序集中已使用了资源标识符“BMap.NET.WindowsForm.BMapControl.resources” BMap.NET.WindowsForm D:\MySource\Decompile\BMap.NET.WindowsForm\CSC 1 活动 运行程序时&a…

javascript 模板引擎

使用场景 在实际开发中&#xff0c;一般都是使用动态请求数据来更新页面&#xff0c;服务器端通常返回json格式的数据&#xff0c;正常操作是我们手动的去拼装HTML&#xff0c;但麻烦且容易出错&#xff0c;因此出现了一些用模版生成HTML的的框架叫js模板引擎如&#xff1a;jq…

成本中心修改或者创建保存时增强的实现

成本中心修改或者创建保存时增强 用户出口程序为&#xff1a;EXIT_SAPLKMA1_003。 可以通过SMOD 或者 CMOD来添加增强代码。 CMOD->COOMKS02 ->EXIT_SAPLKMA1_003 按公司要求&#xff0c;写了段代码检查 创建利成本中心时&#xff0c;业务范围要规范输入。 data PRCTR…

对Windows应用程序进行代码签名

Windows上发布桌面应用程序&#xff0c;您可以看到带有“发布者&#xff1a;未知”的未正确签名的应用程序。 没有被签名的软件 因此&#xff0c;这里有一个有关经验教训的快速指南&#xff0c;可能会帮助您从一开始就正确签署安装程序。请注意&#xff0c;这些说明适用于对已…

环境搭建-Ubuntu18.04.6系统TensorFlow BenchMark的GPU测试

1. 下载Ubuntu18.04.6镜像 登录阿里云官方镜像站&#xff1a;阿里巴巴开源镜像站-OPSX镜像站-阿里云开发者社区 2. 测试环境 Server OS&#xff1a;Ubuntu 20.04.6 LTS Kernel: Linux 5.4.0-155-generic x86-64 Docker Version&#xff1a;24.0.5, build ced0996 docker-com…

数据结构之常见排序算法

文章目录 1.排序概念2.10种排序比较3.排序算法3.1直接插入排序&#xff08;元素越有序&#xff0c;越高效&#xff09;3.2希尔排序序( 缩小增量排序 )3.3直接选择排序3.5堆排序3.6冒泡排序3.8快速排序 递归实现&#xff08;无序使用最好&#xff09;3.8.1挖坑法 &#xff08;建…

yo!这里是STL::string类简单模拟实现

目录 前言 常见接口模拟实现 默认成员函数 1.构造函数 2.析构函数 3.拷贝构造函数 4.赋值运算符重载 迭代器 简单接口 1.size() 2.c_str() 3.clear() 操作符、运算符重载 1.操作符[] 2.运算符 3.运算符> 扩容接口 1.reserve() 2.resize() 增删查改接口 …

JS常用操作数组的方法整理

JavaScript提供了许多用于操作数组的方法。以下是其中一些常见的方法&#xff1a; 1. push() : 将一个或多个元素添加到数组的末尾&#xff0c;并返回新数组的长度。 2. pop() : 移除并返回数组的最后一个元素。 3. unshift() : 将一个或多个元素添加到数组的开头&#xff0…

一做PPT就抓耳挠腮?老码农掏心分享,选对工具才能事半功倍

今天老陈闲来无事摸个鱼&#xff0c;逛社区的时候看到一条有趣的帖子&#xff0c;HR怒喷UI设计师垃圾&#xff0c;说他们还不如应届生毕业生有能力&#xff0c;设计能力菜的惊人&#xff0c;给老陈平淡的生活增加了不少乐趣。 底下的评论也很有意思&#xff0c;有人说视觉表现…

JavaScript正则表达式之座机号/手机号验证校验规则

引用:https://www.bilibili.com/read/cv18300539/ 本文对利用正则表达式对手机号码进行了验证 支持格式&#xff1a; 座机 &#xff1a;xxx-xxxxxxxx、xxxxxxxxxxxx …座机区号的横杠可有可无 手机&#xff1a;xxxxxxxxxxx JavaScript&#xff1a; var: checkPhone (rule,…

想要理解Linux内核是什么

我们可以思考一下进程何时才能感知到内核的存在。例如&#xff0c;在进行内存分配时&#xff0c;最终需要调用内核的sys_mmap系统调用来申请虚拟内存空间&#xff1b;在创建子进程时&#xff0c;最终需要调用内核的sys_fork来复制父进程&#xff1b;在打开文件时&#xff0c;最…

10家国外直播加速CDN厂商PK2023版

以下是针对流媒体加速的10家主要CDN厂商的比较&#xff0c;我们将根据每家公司发展史、他们提供的功能以及他们的CDN定价比较&#xff0c;这样您就可以选择最适合您需求的 CDN。 1.Akamai Akamai Technologies是一家美国CDN厂商&#xff0c;它是全球领先的媒体和软件交付CDN…

dbscan

dbscan Density-based spatial clustering of applications with noise (DBSCAN), 基于密度的聚类方法。 算法的阈值只有两个&#xff0c;距离阈值eps&#xff0c; 最小点个数minPts。如果一个点在eps为半径的园内&#xff0c;包含点的个数>minPts,那么这个点以及这个圆内的…