16.哀家要长脑子了!

目录

1. 707. 设计链表 - 力扣(LeetCode)

2.203. 移除链表元素 - 力扣(LeetCode)

3.206. 反转链表 - 力扣(LeetCode)

4.237. 删除链表中的节点 - 力扣(LeetCode)

5. 19. 删除链表的倒数第 N 个结点 - 力扣(LeetCode)


1. 707. 设计链表 - 力扣(LeetCode)

这我都懂,但是,一让我动手写代码我就不会了TAT TAT TAT TAT TAT TAT

class MyLinkedList {
    int size;          //链表长度
    ListNode *head;    //头结点
public:
    MyLinkedList() {
        this->size = 0;                  //初始化链表无元素,长度为0
        this->head = new ListNode(0);    //头结点为空
    }
    
    int get(int index) {
        if(index < 0 || index >= size){    //访问位置不合理
            return -1;
        }
        ListNode *p = head;
        for(int i = 0; i <= index; i++){    
            p = p->next;
        }
        return p->val;
    }
    
    void addAtHead(int val) {
        addAtIndex(0,val);
    }
    
    void addAtTail(int val) {
        addAtIndex(size,val);
    }
    
    void addAtIndex(int index, int val) {
        if(index > size){    //插入位置大于链表长度,不合法
            return;
        }
        index = max(0,index);    
        size++;               // 插入元素,长度增加
        ListNode *p = head;
        for(int i = 0; i <index; i++){
            p = p->next;
        }
        ListNode *e = new ListNode(val);
        e->next = p->next;    //先为前驱
        p->next = e;          //再后继
    }
    
    void deleteAtIndex(int index) {
        if(index < 0 || index >= size){
            return ;
        }
        size--;    //删除元素 长度减小
        ListNode *pre = head;
        for(int i = 0; i <index; i++){
            pre = pre->next;    //定位到要删除元素的前一个元素
        }    
        ListNode *p = pre->next;
        pre->next = pre->next->next;    
        delete p;
    }
};

/**
 * 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);
 */
2.203. 移除链表元素 - 力扣(LeetCode)

用一个空结点当头结点呀~~ 这样子如果需要删除的是头结点的话,就不需要进行额外操作了。

/**
 * 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 *first = new ListNode(0);    //是要生成新结点不是生成指针
        first->next = head;
        ListNode *p = first;   //工作指针p从头结点开始遍历
        while(p->next){
            if(p->next->val == val){    //p判断下一个位置的值
                p->next = p->next->next;
            }
            else{
                p=p->next;
            }
        }
        head = first->next;    
        delete first;
        return head;
    }
};
3.206. 反转链表 - 力扣(LeetCode)


晕头转向晕头转向



按顺序来是:蓝色、红色、粉色

/**
 * 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* reverseList(ListNode* head) {
        ListNode *prev = nullptr;
        ListNode *cur = head;    //用来指向当前反转方向的元素
        ListNode *next;          //用来指向下一个需要操作的元素
        while(cur){              //当前元素不为空,就需要反转  
            next = cur->next;    //先记录下一个需要反转的元素
            cur->next = prev;    //反转方向啦!不是指向后一个而是前一个
            prev = cur;      //因为要继续遍历 那么现在的元素对于下一个来说就是前驱元素
            cur = next;      //下一个元素来了  
        }
        return prev;
    }
};
4.237. 删除链表中的节点 - 力扣(LeetCode)


嗯。。。。看不太懂题,后面看题解发现,题目中给出这个哪个结点就删除哪个结点,不会给出整个链表,那你直接对这个结点操作就好。

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    void deleteNode(ListNode* node) {
        node->val = node->next->val;    //记得要把值也给更改了
        node->next = node->next->next;
    }
};
5. 19. 删除链表的倒数第 N 个结点 - 力扣(LeetCode)

下次想到办法就先自己动手试试,不管会不会,先试试,再去看题解,像这个你自己的思路就是对的,要自信呀

单链表要删除结点,但是又不知道是正数第几个,没办法咯,只能先求出链表长度。

然后倒数第n个结点就是正数第length-n+1个结点。

/**
 * 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* removeNthFromEnd(ListNode* head, int n) {
        ListNode *p = head;
        int length = 0;
        while(p){
            ++length;
            p = p->next;
        } 
        ListNode *dummy = new ListNode(0, head);
        p = dummy;
        int m = length - n + 1;
        for(int i = 0; i < m-1; i++){
            p = p->next;
        }
        p->next = p->next->next;
        ListNode *ans = dummy->next;
        delete dummy;
        return ans;
    }
};

对于所要删除的结点的前驱结点的定位

for(int i = 1; i < m; i++) 或 for(int i = 0; i < m-1; i++)

加油! 

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

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

相关文章

实测数据的功率谱估计

目录 1.脉搏数据1.1 数据1的结果1.2 数据2的结果 2.振动加速度数据 1.脉搏数据 1.1 数据1的结果 1.2 数据2的结果 2.振动加速度数据

宏基因组|使用CheckM2评估分箱质量

简介 CheckM2使用机器学习快速评估基因组bin质量 与CheckM1不同&#xff0c;CheckM2采用通用训练的机器学习模型&#xff0c;无论分类学谱系如何&#xff0c;均可用于预测基因组bin的完整性和污染情况。这使得它能够在训练集中纳入许多仅具有少数&#xff08;甚至只有一个&am…

WSL安装-问题解决

WslRegisterDistribution failed with error: 0x8004032d WslRegisterDistribution failed with error: 0x80080005 Error: 0x80080005 ??????? 解决&#xff1a; 1、 winr输入&#xff1a;optionalfeatures.exe 2、打开这两项

Navicat 干货 | 掌握 PostgreSQL 规则语法

PostgreSQL 规则提供了一种强大的机制&#xff0c;控制查询执行并在数据库内部实施数据操作。理解规则的语法和用法对于有效利用其功能至关重要。在上周的文章中&#xff0c;我们探讨了 PostgreSQL 规则的工作原理及其与触发器的区别。今天的文章将使用免费的 “dvdrental”示例…

​Game Maker 0.10:让创作、协作和游戏变得更简单

继去年 12 月成功发布 Game Maker 0.9 之后&#xff0c;我们又隆重推出 Game Maker 0.10。在 0.9 更新的主要增强功能基础上&#xff0c;该版本为创作者实现其愿景提供了更多改进和工具。 为此&#xff0c;The Sandbox 还正式启动了全球范围的创作者训练营&#xff0c;以帮助我…

初学python记录:力扣377. 组合总和 Ⅳ

题目&#xff1a; 给你一个由 不同 整数组成的数组 nums &#xff0c;和一个目标整数 target 。请你从 nums 中找出并返回总和为 target 的元素组合的个数。 题目数据保证答案符合 32 位整数范围。 提示&#xff1a; 1 < nums.length < 2001 < nums[i] < 1000nu…

双周总结#008 - AIGC

本周参与了公司同事对 AIGC 的分享会&#xff0c;分享了 AIGC 在实际项目中的实践经验&#xff0c;以及如何进行 AIGC 的落地。内容分几项内容&#xff1a; 什么是 AIGCAIGC 能做什么AIGC 工具 以年终总结为例&#xff0c;分享了哪些过程应用了 AIGC&#xff0c;以及 AIGC 落地…

一款pdf工具

下载链接&#xff1a;点击跳转&#xff1b; 它是一个installer&#xff0c;下好它之后&#xff0c;把网断掉&#xff0c;然后双击它&#xff0c;他会默认安装在C盘&#xff0c;安装时&#xff0c;浏览器可能会有一个弹窗&#xff0c;直接关掉并进入任务管理器杀掉所有smallerp…

go语言实现心跳机制样例

1、服务端代码&#xff1a; package mainimport ("fmt""net" )func handleClient(conn net.Conn) {defer conn.Close()fmt.Println("Client connected:", conn.RemoteAddr())// 读取客户端的数据buffer : make([]byte, 1024)for {n, err : conn…

如果备份了oradata文件,该如何还原Oracle数据呢?

程序员的公众号&#xff1a;源1024&#xff0c;获取更多资料&#xff0c;无加密无套路&#xff01; 最近整理了一波电子书籍资料&#xff0c;包含《Effective Java中文版 第2版》《深入JAVA虚拟机》&#xff0c;《重构改善既有代码设计》&#xff0c;《MySQL高性能-第3版》&…

C语言结构体,枚举,联合

系列文章目录 第一章 C语言基础知识 第二章 C语言控制语句 第三章 C语言函数详解 第四章 C语言数组详解 第五章 C语言操作符详解 第六章 C语言指针详解 第七章 C语言结构体详解 第八章 详解数据在内存中的存储 第九章 C语言指针进阶 文章目录 1. 结构体 1.1 声明结构…

URL解析

目录 URIURLURL语法相对URLURL中的转义 现在与未来PURL 在 URL出现之前&#xff0c;人们如果想访问网络中的资源&#xff0c;就需要使用不同的 应用程序&#xff0c;如共享文件需要使用 FTP程序&#xff0c;想要发送邮件必须使用 邮件程序&#xff0c;想要看新闻那只能使用…

华为认证云计算前景如何

互联网/移动互联网经历了高速发展的二十年&#xff0c;我们有幸一起见证了华为、阿里、腾讯、百度、字节跳动、京东、滴滴、拼多多等互联网公司的崛起&#xff0c;让普通技术人实现逆袭拿到高薪&#xff0c;也让小镇做题家们有了阶层跨越的机会。 但机会都是留给有准备的人&…

2024年内外贸一体化融合发展(长沙)交易会

2024年内外贸一体化融合发展&#xff08;长沙&#xff09;交易会 一、总体思路 充分发挥湖南作为全国内外贸一体化试点地区作用&#xff0c;坚持“政府主导、市场驱动、企业为主”的原则&#xff0c;以“助力双循环&#xff0c;拓展新市场&#xff0c;促进新消费”为主题&…

AI预测体彩排列3第2套算法实战化测试第1弹2024年4月22日第1次测试

从今天开始&#xff0c;开始新一轮的测试&#xff0c;本轮测试&#xff0c;以6码为基础&#xff0c;同步测试杀号情况&#xff0c;争取杀至4-5码。经过计算&#xff0c;假如5码命中&#xff0c;即每期125注&#xff0c;投入250元&#xff0c;十期共计2500元&#xff0c;则命中率…

OpenFeign远程调用

一、OpenFeign替代RestTemplate 1、需要引入的依赖 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId><version>4.1.1</version> </dependency> 在引入依…

YMP实现Oracle迁移到YashanDB

迁移需求 ip地址 数据库信息 操作系统信息 源库 192.168.3.132 实例名topdh 用户密码TOPICIS/oracle 端口1521 Centos7.9 x86_64 目标库 192.168.3.175 实例名yasdb 用户密码topicist/opicis 端口1688 Centos7.9 x86_64 迁移前准备 YMP工具获取 根据实际需求向厂…

ArrayList与顺序表(1)

前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; hellohello~&#xff0c;大家好&#x1f495;&#x1f495;&#xff0c;这里是E绵绵呀✋✋ &#xff0c;如果觉得这篇文章还不错的话还请点赞❤️❤️收藏&#x1f49e; &#x1f49e; 关注&#x1f4a5;&#x…

GEE24:合肥市1986-2024年年均NDVI变化分析

代码如下&#xff1a; var roi ee.FeatureCollection("users/yipeizhao736/HefeiProvince"); Map.centerObject(roi); Map.addLayer(roi,{color:grey},roi); // Applies scaling factors. function applyScaleFactors(image) {var opticalBands image.select(SR_B…