Leetcode 刷题第三天|链表

news2025/7/14 21:15:00

链表理论

什么是链表

链表是一种通过指针串联在一起的线性结构,每个节点有两个部分组成: 数据域和指针域。最后一个节点的指针域指向null
链表的入口节点为链表的头结点也就是head。
链表结构示意图

链表的类型

单链表

如上图就是单链表

双链表

单链表的指针域只有一个,指向下一个节点。
双链表的指针域有两个, 一个指向下一个节点,另一个指向上一个节点。
在这里插入图片描述

循环链表

循环链表,顾名思义,就是链表首尾相连。
循环链表可以用来表示约瑟夫环问题。
在这里插入图片描述

链表的存储方式

了解完链表的类型,再说一下链表的存储方式。
数组是再内存中连续分布的,而链表在内存中则不是连续分布的,
链表可以通过指针域访问内存中中不连续的某个节点。
在这里插入图片描述

链表的定义

接下来说一下链表的定义
下面的是C/C++的定义的链表节点,如下所示。

struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(NULL) {} 
};

链表的操作

删除节点

删除D节点如下图,
在这里插入图片描述
只要将C节点的next指向E就可以了。
在C++ 中需要将D节点手动释放掉。

添加节点

在这里插入图片描述

性能分析

在这里插入图片描述

203. 移除链表元素

203. 移除链表元素

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* removeElements(ListNode* head, int val) {
        ListNode* p = new ListNode(0, head);
        ListNode* cur = p->next;
        ListNode* front = p;
        while(cur) {
            if(cur->val == val) {
                front->next = cur->next;
                cur = cur->next;
            }else {
                front = cur;
                cur = cur->next;
            }
        }
        return p->next;
    }
};

707 设计链表

class MyLinkedList {
public:
    MyLinkedList() {
        phead = new ListNode(0);
    }
    
    int get(int index) {
        ListNode* p = phead->next;
        while(index) {
            p = p->next;
            index--;
        }
        return p->val;
    }
    
    void addAtHead(int val) {
        ListNode* newNode = new ListNode(val, phead->next);
        phead->next = newNode;
    }
    
    void addAtTail(int val) {
        ListNode* cur = phead->next;
        ListNode* fNode = phead;
        while(cur) {
            fNode = cur;
            cur = cur->next;
        }
        ListNode* newNode = new ListNode(val);
        fNode->next =newNode;
    }
    
    void addAtIndex(int index, int val) {
        ListNode* cur = phead->next;
        ListNode* fNode = phead;
        while(index) {
            index--;
            fNode = cur;
            cur = cur->next;
        }
        ListNode* newNode = new ListNode(val, cur);
        fNode->next = newNode;
        return;
    }
    
    void deleteAtIndex(int index) {
        ListNode* cur = phead->next;
        ListNode* fNode = phead;
        while(index) {
            index--;
            fNode = cur;
            cur = cur->next;
        }
        ListNode* nextNode = cur->next;
        fNode->next = nextNode;
    }
    private:
    ListNode* phead;
};

/**
 * 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);
 */

本地测试没问题,但是提交会有问题。
在这里插入图片描述
本地测试的用例通过了,但是提交上去报这个错误。抓耳挠腮

class MyLinkedList {
public:
    MyLinkedList() {
        phead = new ListNode(0);
    }
    
    int get(int index) {
        ListNode* p = phead;
        while(index) {
            p = p->next;
            index--;
        }
        return p->val;
    }
    
    void addAtHead(int val) {
        ListNode* newNode = new ListNode(val, phead->next);
        phead->next = newNode;
    }
    
    void addAtTail(int val) {
        ListNode* cur = phead;
        ListNode* fNode = phead;
        while(cur) {
            fNode = cur;
            cur = cur->next;
        }
        ListNode* newNode = new ListNode(val);
        fNode->next =newNode;
    }
    
    void addAtIndex(int index, int val) {
        ListNode* cur = phead;
        ListNode* fNode = phead;
        while(index) {
            index--;
            fNode = cur;
            cur = cur->next;
        }
        ListNode* newNode = new ListNode(val, cur->next);
        fNode->next = newNode;
        return;
    }
    
    void deleteAtIndex(int index) {
        ListNode* cur = phead;
        ListNode* fNode = phead;
        while(index) {
            index--;
            fNode = cur;
            cur = cur->next;
        }
        fNode->next = cur->next;
        delete cur;
    }
    private:
    ListNode* phead;
};

/**
 * 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);
 */

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

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

相关文章

【个人博客搭建】(22)申请QQ开发者

这里我们要引入的一个概念是OAuth - OAuth 2.0是一个行业标准的授权协议,用于处理用户数据访问和分享的安全问题。它允许用户将他们对某些服务的访问权限授权给第三方应用,而无需分享他们的用户名和密码。以下是对OAuth 2.0的介绍: 基本概念 …

2024年数据中心能源十大趋势白皮书(免费下载)

数据中心能源是确保数据中心正常运行的关键组成部分,涉及为数据中心提供电、水、油、气等多种能源的相关设备。以下是关于数据中心能源的详细概述: 一、数据中心能源的重要性 数据中心作为信息存储、处理和传输的核心设施,对能源的需求极高…

基于深度学习的电池健康状态预测(Python)

电池的故障预测和健康管理PHM是为了保障设备或系统的稳定运行,提供参考的电池健康管理信息,从而提醒决策者及时更换电源设备。不难发现,PHM的核心问题就是确定电池的健康状态,并预测电池剩余使用寿命。但是锂电池的退化过程影响因…

Golang——gRPC认证

一. OpenSSL 1.1 介绍 OpenSSL是一个开放源代码的软件库包,用于支持网络通讯过程中的加密。这个库提供的功能包含了SSL和TLS协议的实现,并可用于生成密钥、证书、进行密码运算等。 其组成主要包括一下三个组件: openssl:多用途的命…

智能售货机的成功关键点

智能售货机的成功关键点 智能售货机的盈利水平是众多投资者关注的焦点。尽管常有人认为该行业利润丰厚,但实际上,智能售货机的利润率通常维持在一个相对适中的范围,大约在5%至15%之间。这一数据背后,涵盖了包括物流配送、日常运维…

Java---BigInteger和BigDecimal和枚举

1.简介 1.BigInteger可以支持任意长度的整数 2.BigDecimal可以支持任意精度的浮点数 3.用来做精确计算 2.创建方式 new BigInteger(); new BigInteger(参数1,进制):可以将不同进制转成10进制显示 new BigDecimal(); BigInteger.valueOf(); BigDecimal.valueOf();…

transformers之text generation解码策略

目录 参数TemperatureTop-p and Top-k1. 选择最上面的token:贪婪解码2. 从最上面的tokens中选择:top-k3. 从概率加起来为15%的top token中选择:top-pFrequency and Presence Penaltiestransformers库中的解码策略贪婪搜索对比搜索多项式采样beam搜索解码beam搜索多项式采样多样…

中国大模型站起来了!甚至被美国团队反向抄袭

一直以来,美国是公认的AI领域强者,我国AI技术虽然差不多,但始终落人一步。然而,近日斯坦福团队的AI模型却被指控抄袭中国AI模型,这下许多人都坐不住了。 被实锤抄袭的,是斯坦福大学AI团队,他们…

WWDC 2024及其AI功能的引入对中国用户和开发者的影响

WWDC(Apple Worldwide Developers Conference)是苹果公司一年一度的重要活动,吸引了全球开发者的关注。WWDC 2024引入了许多新技术和功能,尤其是AI功能的加入,引发了广泛讨论。本文将深入探讨中国开发者如何看待WWDC 2…

四川赤橙宏海商务信息咨询有限公司揭秘抖音电商新风口

在数字化浪潮席卷全球的今天,电商行业作为新时代经济的生力军,正以前所未有的速度发展。作为抖音电商服务的佼佼者,四川赤橙宏海商务信息咨询有限公司凭借其专业的服务团队和前瞻的市场洞察,不断刷新行业纪录,助力商家…

docker安装rabbitmq和延迟插件(不废话版)

1.下载镜像 docker pull rabbitmq:3.8-management 2.启动 docker run -e RABBITMQ_DEFAULT_USERlicoos -e RABBITMQ_DEFAULT_PASSlicoosrabbitmq -v mq-plugins:/plugins --name mq --hostname mq -p 15672:15672 -p 5672:5672 -d rabbitmq:3.8-management 3.下载对…

跨海交流丨台湾混凝土行业参访团与上海思伟软件共筑“智慧砼厂”梦 !

每一次跨越地域的握手 都是行业革新与智慧交融的序曲 台湾优质混凝土参访团 2024年5月29日,财团法人台湾营建研究院院长吕良正先生,率领着由61名行业精英组成的台湾商砼参访团,跨越海峡抵达上海,开展了一场连接两岸的学习交流活动…

苹果的股票都飙升7%了,谷歌仍在建议你往披萨上加胶水|TodayAI

最近,谷歌(Google)的人工智能再次引发了一场笑话。这次,它建议用户在披萨上添加胶水,引起了广泛关注和讨论。事情的起因源自一位互联网传奇人物Katie Notopoulos,她实际上制作并食用了一个胶水披萨&#xf…

【源码】2024最新陪诊小程序uniapp+thinkphp

20 2024最新陪诊小程序uniappthinkphp资源来源:52codes.cc 20最新陪诊小程序uniappthinkphp 简介:随着社会逐渐步进入老龄化越来越多的老年人或者不经常去医院的用户对于医院繁琐的流程很是苦劳于是陪诊这个行业开始兴起。小白陪诊开发理念&#xff0…

PS2045L-ASEMI低Low VF肖特基PS2045L

编辑:ll PS2045L-ASEMI低Low VF肖特基PS2045L 型号:PS2045L 品牌:ASEMI 封装:TO-277 最大平均正向电流(IF):20A 最大循环峰值反向电压(VRRM):45V 最大…

CVE-2019-20933-influxdb未授权访问-vulhub

1.原理 参考:https://blog.csdn.net/tqlisno1/article/details/109110644 InfluxDB 未授权访问 漏洞复现_influxdb未授权访问复现-CSDN博客 InfluxDB 是一个开源分布式时序、时间和指标数据库,使用 Go 语言编写,无需外部依赖。其设计目标是…

铝合金板件加工迎来3D视觉新时代

在制造业的浩瀚星空中,铝合金板件加工一直以其轻质、高强度、耐腐蚀的特性,扮演着举足轻重的角色。然而,随着市场竞争的加剧和产品需求的多样化,传统的加工方式已难以满足现代制造业对高效率、高精度的追求。在这个关键时刻&#…

【Java】解决Java报错:ArithmeticException during Division

文章目录 引言一、ArithmeticException的定义与概述1. 什么是ArithmeticException?2. ArithmeticException的常见触发场景3. 示例代码 二、解决方案1. 检查除数是否为零2. 使用异常处理3. 使用浮点数除法4. 使用自定义方法进行安全除法 三、最佳实践1. 始终检查除数…

RAG实操教程,LangChain + Llama2 | 创造你的个人LLM

本文将逐步指导您创建自己的RAG(检索增强生成)系统,使您能够上传自己的PDF文件并向LLM询问有关PDF的信息。本教程侧重于图中蓝色部分,即暂时不涉及Gradio(想了解已接入Gradio的,请参考官网)。相…

计算机网络-BGP路由优选原则四-优选AS_Path属性值最短的路由

一、优选AS_Path属性值最短的路由 AS_Path:这是BGP中最重要的属性之一,它记录了路由信息经过的所有自治系统。AS_Path属性帮助接收路由信息的路由器了解该路由的来源和路径。AS_Path由一系列的自治系统号组成,这些自治系统号代表了路由信息在…