随想录二刷Day06——链表

news2024/9/23 21:28:31

文章目录

  • 链表
    • 6. 删除链表的倒数第 N 个结点
    • 7. 链表相交
    • 8. 环形链表 II

链表

6. 删除链表的倒数第 N 个结点

19. 删除链表的倒数第 N 个结点

思路:
用双指针的方法,fast 和 slow 之间保持距离为 n,只需要遍历一次即可完成删除任务。
为了方便删除头节点,设置一个虚拟指针。

class Solution {
public:
    ListNode* removeNthFromEnd(ListNode* head, int n) {
        if (head == NULL || head->next == NULL) return NULL;

        ListNode *_dummyHead = new ListNode(0);
        _dummyHead->next = head;
        ListNode *fast = _dummyHead;
        ListNode *slow = _dummyHead;

        while (n--) {
            fast = fast->next;
        }
        while (fast->next) {
            fast = fast->next;
            slow = slow->next;
        }

        ListNode *tmp = slow->next;
        slow->next = slow->next->next;
        delete tmp;

        return _dummyHead->next;
    }
};

7. 链表相交

面试题 02.07. 链表相交

思路:
分别计算出两链表的长度,然后让较长的链表头指针移动到剩余节点数和较短的链表一样长;
然后两头指针同时移动,直到两指针相同,则找到答案。否则没有交点返回 NULL。

class Solution {
public:
    ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
        ListNode *curA = headA;
        ListNode *curB = headB;
        int lenA = 0, lenB = 0;
        int delta = 0;
        
        while (curA) {
            curA = curA->next;
            lenA++;
        }
        while (curB) {
            curB = curB->next;
            lenB++;
        }

        if (lenA >= lenB) {
            delta = lenA - lenB;
        } else {
            delta = lenB - lenA;
            swap(headA, headB);
        }

        while (delta--) {
            headA = headA->next;
        }

        while (headA) {
            if (headA == headB) return headA;
            headA = headA->next;
            headB = headB->next;
        }

        return NULL;
    }
};

8. 环形链表 II

142. 环形链表 II

思路:
将链表按如下方式划分:
在这里插入图片描述
用快慢两个指针从起点出发,fast 每次走 2,slow 每次走 1,如果有环则 fast 和 slow 一定会在环中相遇,如果 x 很长的话,此时 fast 有可能已经在环中转悠好几圈了(n圈),由 slow 走过的路 (x+y) 和 fast 走过的路 (x+y+n*(z+y)) 可以得到如下等式
( x + y ) ∗ 2 = x + y + n ∗ ( y + z ) (x+y)*2 = x+y+n*(y+z) (x+y)2=x+y+n(y+z)
x = ( n − 1 ) ∗ ( y + z ) + z x = (n-1)*(y+z) + z x=(n1)(y+z)+z
可见,x 等于走完 z 在走几圈环,所以,两个节点分别从起点和 fast、slow 相交处出发,每次走 1,一定会在环形入口处第一次相交。

class Solution {
public:
    ListNode *detectCycle(ListNode *head) {
        if (head == NULL || head->next == NULL) return NULL;
        ListNode *cur1 = head->next;
        ListNode *cur2 = head->next->next;

        while (cur1 && cur2 && cur2->next && cur2 != cur1) {
            cur1 = cur1->next;
            cur2 = cur2->next->next;
        }
        if (cur1 != cur2) return NULL;

        cur1 = head;
        while (cur1 != cur2) {
            cur1 = cur1->next;
            cur2 = cur2->next;
        }
        
        return cur1;
    }
};

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

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

相关文章

操作系统笔记-第一章

文章目录操作系统概述1. 操作系统的概念1.1 操作系统的地位1.2 操作系统的作用1.3 操作系统的定义2. 操作系统的历史2.1 操作系统的产生2.1.1 手动操作阶段(20世纪40年代)2.1.2 批处理阶段(20世纪50年代)2.1.3 执行系统阶段&#…

aws console 使用fargate部署aws服务快速跳转前端搜索栏

测试过程中需要在大量资源之间跳转,频繁的点击不如直接搜索来的快,于是写了一个搜索框方便跳转。 前端的静态页面可以通过s3静态网站托管实现,但是由于中国区需要备案的原因,可以使用ecs fargate部署 步骤如下: 编写…

Springboot打包成jar发布

打包的方式 打包成jar包打包成war包 区别:jar包内置了tomcat、netty等服务器,更改只需要修改pom.xml的坐标即可,war不内置服务器,需要上传到服务器tomcat解压后运行 如何打包? 打包成jar,pom.xml中设置打…

Linux基础命令-df显示磁盘的使用情况

文章目录 文章目录 df 命令介绍 语法格式 基本参数 参考实例 1)以人类可读形式显示磁盘空间的使用情况 2)显示磁盘的inode信息 3)显示磁盘和文件系统类型 4)指定显示文件系统 5)显示所有磁盘空间中的内容 …

C++11多线程编程 三:锁资源管理和条件变量

C11多线程编程 一:多线程概述 C11多线程编程 二:多线程通信,同步,锁 C11多线程编程 三:锁资源管理和条件变量 3.1 手动实现RAii管理mutex资源锁自动释放 自己写的代码一般都是自己上锁,自己进行释放&…

【fly-iot飞翔物联】(2):如何从0打造自己的物联网平台,使用开源的技术栈搭建一个高性能的物联网平台,目前在设计阶段。

目录前言1,fly-iot飞翔物联2,mqtt-broker 服务3, 管理后台产品/设备设计4,数据存储目前使用mysql,消息存储到influxdb中5,规则引擎使用 ekuiper6, 总结和其他的想法前言 本文的原文连接是: https://blog.csdn.net/freewebsys/article/details…

3-2 创建一个至少有两个PV组成的大小为20G的名为testvg的VG

文章目录1. 在vmware添加多块20G的硬盘,并创建分区2. 创建一个至少有两个PV组成的大小为20G的名为testvg的VG,要求PE大小为16M,而后在卷组中创建大小为5G的逻辑卷testlv;挂载至/users目录3. 新建用户archlinux,要求其家目录为/users/archlinu…

华为OD机试题,用 Java 解【字符串变换最小字符串】问题

最近更新的博客 华为OD机试 - 猴子爬山 | 机试题算法思路 【2023】华为OD机试 - 分糖果(Java) | 机试题算法思路 【2023】华为OD机试 - 非严格递增连续数字序列 | 机试题算法思路 【2023】华为OD机试 - 消消乐游戏(Java) | 机试题算法思路 【2023】华为OD机试 - 组成最大数…

合规要点解析:如何正确的使用隐私增强技术

开放隐私计算开放隐私计算开放隐私计算OpenMPC是国内第一个且影响力最大的隐私计算开放社区。社区秉承开放共享的精神,专注于隐私计算行业的研究与布道。社区致力于隐私计算技术的传播,愿成为中国 “隐私计算最后一公里的服务区”。183篇原创内容公众号G…

名创优品第二季度财报预测:收入和利润都将大幅下降

来源:猛兽财经 作者:猛兽财经 名创优品2023财年第二季度财务业绩预测 名创优品(MNSO) 将于2月28日公布2023会计年度第二季度(2022年9月30日至12月31日)财务业绩。 卖方分析师认为,名创优品2023财年第二季度的财务业绩将不如2023财年第一季度。…

前端常考react面试题(持续更新中)

react diff 算法 我们知道React会维护两个虚拟DOM,那么是如何来比较,如何来判断,做出最优的解呢?这就用到了diff算法 diff算法的作用 计算出Virtual DOM中真正变化的部分,并只针对该部分进行原生DOM操作,而…

Axure8设计—动态仪表盘

本次分享的的案例是Axure8制作的动态仪表盘,根据设置的数值,仪表盘指针旋转到相应的值位置 预览地址:https://2qiuwg.axshare.com 下载地址:https://download.csdn.net/download/weixin_43516258/87502161 一、制作原型 1、首先创建空白页…

JavaWeb中异步交互的关键——Ajax

文章目录1,Ajax 概述1.1 作用1.2 同步和异步1.3 案例1.3.1 分析1.3.2 后端实现1.3.3 前端实现2,axios2.1 基本使用2.2 快速入门2.2.1 后端实现2.2.2 前端实现2.3 请求方法别名3,JSON3.1 概述3.2 JSON 基础语法3.2.1 定义格式3.2.2 代码演示3.2.3 发送异步…

【蓝桥杯每日一题】双指针算法

🍎 博客主页:🌙披星戴月的贾维斯 🍎 欢迎关注:👍点赞🍃收藏🔥留言 🍇系列专栏:🌙 蓝桥杯 🌙我与杀戮之中绽放,亦如黎明的花…

电子科技大学数据库与软件工程实验报告一

适用于网络工程和物联网专业(信通学院) 实验报告格式和内容如下(仅供参考,具体还需要自己理解) 本实验有一个陷阱****:安装Centos系统的时候,分配区的大小的时候一定要默认,不能自己…

Maven的下载和安装【详细】

文章目录一、什么是Maven?二、Maven的安装与配置2.1下载Maven安装包2.2配置Maven环境变量2.3验证三、Idea配置Maven3.1配置 setting.xml文件3.2Idea配置Maven一、什么是Maven? Apache Maven是个项目管理和自动构建工具,基于项目对象模型&…

【力扣周赛#334】6369. 左右元素和的差值 + 6368. 找出字符串的可整除数组 + 6367. 求出最多标记下标

目录 6369. 左右元素和的差值 - 前缀后缀和 ac 6368. 找出字符串的可整除数组 - 操作余数ac 6367. 求出最多标记下标 - 二分答案 贪心 6369. 左右元素和的差值 - 前缀后缀和 ac class Solution {public int[] leftRigthDifference(int[] nums) {int nnums.length;int[] re…

开发同事辞职,接手到垃圾代码怎么办?

小王新加入了一家公司,这家公司有点年头,所以连屎山都是发酵过的,味道很冲。和大多数时运不济的程序员一样,到了这种公司,做的大多数工作,就是修补这些祖传代码,为其添砖加瓦。每当被折腾的筋疲…

ChatGPT的互补工具Perplexity的详细使用方法(持续更新)

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,科大讯飞比赛第三名,CCF比赛第四名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…

Leetcode.1372 二叉树中的最长交错路径

题目链接 Leetcode.1372 二叉树中的最长交错路径 Rating : 1713 题目描述 给你一棵以 root为根的二叉树,二叉树中的交错路径定义如下: 选择二叉树中 任意 节点和一个方向(左或者右)。如果前进方向为右,那…