Leetcode 刷题第三天|链表

链表理论

什么是链表

链表是一种通过指针串联在一起的线性结构,每个节点有两个部分组成: 数据域和指针域。最后一个节点的指针域指向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);
 */

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

对比深度图聚类的硬样本感知网络

Hard Sample Aware Network for Contrastive Deep Graph Clustering 文章目录 Hard Sample Aware Network for Contrastive Deep Graph Clustering摘要引言方法实验结论启发点 摘要 本文提出了一种名为Hard Sample Aware Network (HSAN)的新方法,用于对比深度图聚类…

OpenStack学习笔记之三:用软件定义的理念做安全

第3章 用软件定义的理念做安全 1.不进则退,传统安全回到“石器时代” 1.1 企业业务和IT基础设施的变化 随着企业办公环境变得便利,以及对降低成本的天然需求,企业始终追求IT集成设施的性价比、灵活性、稳定性和开放性。而云计算、移动办公…

【多模态/CV】图像数据增强数据分析和处理

note 多模态大模型训练前,图片数据处理的常见操作:分辨率调整、网格畸变、水平翻转、分辨率调整、随机crop、换颜色、多张图片拼接、相似图片检测并去重等 一、分辨率调整 from PIL import Image def resize_image(original_image_path, save_image_p…

【STM32】uc/OS-III多任务程序

目录 一、背景介绍二、UCOS-III简单介绍(一)源码(二)功能 三、实验(一)基于STM32CubeMX建立工程1、创建项目2、配置项目 (二)实现 四、总结五、参考 一、背景介绍 学习嵌入式实时操…

使用cv2控制鼠标实现circle的拖拽

2.代码 import numpy as np import cv2x_center [100,200,300,400] y_center [200,200,200,200] radius 30def mouse_LButtonDown(event, x, y, flags, param):global tempif event cv2.EVENT_LBUTTONDOWN:print(f" Down Clicked at ({x}, {y})")for i in range…

贪心算法-加油站

一、题目描述 二、解题思路 1.运动过程分析 这里需要一个油箱剩余油量的变量resGas,初始化resGas0;还需要一个标记从什么位置当做初始位置的startIdx,初始化startIdx0。 我们从数组下标idx0处开始向后遍历,初始时startIdx0&#…

第一个小爬虫_爬取 股票数据

前言 爬取 雪球网的股票数据 [环境使用]:python 3.12 解释器pycharm 编辑器 【模块使用】:import requests -->数据请求模块 要安装 命令 pip install requestsimport csv -->将数据保存到CSV表格中import pandas -->也可以将数据保…

武汉理工大学嵌入式系统应用之临时抱佛脚复习

其实大学很多课程的期末冲刺复习非常简单,就是在大脑中构建一个redis数据库就行了,缓存下一大堆键值对,然后考试的时候输出,很没意思。 嵌入式系统的定义 以应用为中心,以计算机技术为基础,软件硬件可裁剪…

基于Python的北京天气数据可视化分析

项目用到库 import numpy as np import pandas as pd import datetime from pyecharts.charts import Line from pyecharts.charts import Boxplot from pyecharts.charts import Pie,Grid from pyecharts import options as opts from pyecharts.charts import Calendar 1.2…

【Vue】——组件的注册与引用

💻博主现有专栏: C51单片机(STC89C516),c语言,c,离散数学,算法设计与分析,数据结构,Python,Java基础,MySQL,linux&#xf…

大泽动力30KW静音汽油发电机

安全操作: 在使用前,确保发电机放置在通风良好、干燥、无易燃物品的地方。 避免在发电机运行时触摸其热表面或运转部件,以免烫伤或受伤。 遵循发电机的启动和停机程序,不要随意操作。 燃油管理: 使用高质量的汽油&…

【C/C++】IO流

目录 前言: 一,C语言的I/O流 二,C的I/O流 2-1,C标准IO流 2-2,IO流的连续输入 前言: “流”即是流动的意思,是物质从一处向另一处流动的过程,是对一种有序连续且具有方向性的数据…

地面站Mission planner

官方教程; Mission Planner地面站介绍 | Autopilot (gitbook.io) Mission Planner 功能/屏幕 — Mission Planner 文档 (ardupilot.org) 安卓或者windows软件下载地址: 地面站连接及使用 plane (cuav.net) 在完全装机后再进行各干器件的校准,没有组…

【十大排序算法】插入排序

插入排序,如一位细心的整理者, 她从序列的左端开始, 挨个将元素归位。 每当她遇到一个无序的元素, 便将它插入已经有序的部分, 直至所有元素有序排列。 她不张扬,却有效率, 用自己的方式&…

如何恢复已删除的文件(简单5 分钟方法)

本文介绍如何使用文件恢复程序恢复已删除的文件。其中包括与恢复已删除文件相关的提示。 如何恢复已删除的文件 从硬盘中恢复已删除的文件并不是一件疯狂的事情,但一旦意识到文件已被删除,尝试恢复会有所帮助。被删除的文件通常直到被其他文件覆盖后才真…

如何在Python中向Word文档添加段落

如何在Python中向Word文档添加段落 添加段落代码解析添加前与添加后 在这篇博客文章中,我们使用Python向Word文档添加段落。 添加段落 from docx import Document# 打开一个现有的Word文档 doc Document(rC:\Users\Administrator\Desktop\Word文档\example.docx)…

02Linux文件,目录,过滤,管道常用命令

Linux基础概述 Linux基础目录 Linux没有盘符这个概念, 只有一个顶级根目录 /, 所有文件都在它下面 在Windows系统中路径之间的层级关系使用/来表示在Linux系统中路径之间的层级关系使用/来表示,出现在开头的/表示根目录, /home/a.txt表示根目录下的home文件夹内有a.txt文件 …

Python中__面向对象__学习 (上)

目录 一、类和对象 1.类的定义 2.根据对象创建类 二、构造和析构 1.构造方法 (1)不带参数的构造方法 (2)带参数的构造方法 2.析构方法 三、重载 1.定制对象的字符串形式 (1)只重载__str__方法 …

STM32 HAL库开发——入门篇(3):OLED、LCD

源自正点原子视频教程: 【正点原子】手把手教你学STM32 HAL库开发全集【真人出镜】STM32入门教学视频教程 单片机 嵌入式_哔哩哔哩_bilibili 一、OLED 二、内存保护(MPU)实验 2.1 内存保护单元 三、LCD 3.1 显示屏分类 3.2 LCD简介 3.3 LCD…

【JAVASE】日期与时间类(上)

一:概述 从JAVA SE 8开始提供了java.time包,该包中有专门处理日期和时间的类。 LocalDate LocalDateTime 和LocalTime 类的对象封装和日期、时间有关的数据,这三个类都是final类,而且不提供修改数据的方法,即这…