随想录二刷Day06——链表

news/2024/4/27 6:46:57/文章来源:https://blog.csdn.net/zhiai_/article/details/129225442

文章目录

  • 链表
    • 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)+zx = (n-1)*(y+z) + zx=(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.luyixian.cn/news_show_74463.aspx

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

相关文章

使用jenkins实现自动化部署springboot应用

1. 前置准备 这里代码仓库使用gitlab。在介绍如何通过gitlab和jenkins进行自动化部署之前,需要先安装完成gitlab以及jenkins。两种程序的安装方式以及相关配置可以参看以下内容: linux中安装gitlab:linux安装极狐gitlab linux中安装jenki…

EasyRecovery16最新免费版电脑数据恢复软件功能介绍

EasyRecovery是一款支持Windows/Mac平台进行恢复图片的专业工具,尤其是各种流行单反相机RAW格式文件,以及超大型视频文件等,推荐摄影爱好者使用。适用于主流相机、无人机、PC、存储卡、USB 闪存驱动器等,由于删除、损坏或意外格式…

[数据结构]:05-循环队列(链表)(C语言实现)

目录 前言 已完成内容 循环队列实现 01-开发环境 02-文件布局 03-代码 01-主函数 02-头文件 03-QueueCommon.cpp 04-QueueFunction.cpp 结语 前言 此专栏包含408考研数据结构全部内容,除其中使用到C引用外,全为C语言代码。使用C引用主要是为了…

CountDownLatch与CyclicBarrier原理剖析

1.CountDownLatch 1.1 什么是CountDownLatch CountDownLatch是一个同步工具类,用来协调多个线程之间的同步,或者说起到线程之间的通信(而不是用作互斥的作用)。 CountDownLatch能够使一个线程在等待另外一些线程完成各自工作之…

学习网安需要了解的一些基础知识

P1.基本概念 1.POC/EXP POC(proof of concept)常指一段漏洞验证代码;EXP(exploit)指利用系统漏洞进行攻击的动作 PoC是证明漏洞存在的,而 Exp 是利用这个漏洞进一步进行攻击,先有POC,才有EXP 2.Payload/shellcode payload&#xff0…

学习周报2.26

文章目录前言文献阅读摘要方法结果深度学习Encoder-Decoder(编码-解码)信息丢失的问题Attention机制总结前言 This week,I read an article about daily streamflow prediction.This study shows the results of an in-depth comparison between two di…

Lambda表达式的本质

一直想写一篇文章,来总结lambda表达式,但是之前感觉总结的不是特别到位,现在看了几篇文章和视频后,感觉对lambda表达式有了比较深刻的认识,现在进行记录总结如下: lambda表达式又叫做匿名函数,…

网络应用之HTTP响应报文

HTTP响应报文学习目标能够知道HTTP响应报文的结构1. HTTP响应报文分析HTTP 响应报文效果图:响应报文说明:--- 响应行/状态行 --- HTTP/1.1 200 OK # HTTP协议版本 状态码 状态描述 --- 响应头 --- Server: Tengine # 服务器名称 Content-Type: text/html; charsetUTF-8 # 内容类…

【教程】Notion笔记多平台设置中文显示

这个笔记软件界面挺好看,惊艳到了。 目录 网页版 桌面端 Windows版 Mac端 安卓端 网页版 直接安装这个插件即可,Chrome/Edge适用:Notion中文版 桌面端 都要去这个github下载语言包,用于替换文件:https://github.c…

xxjob分布式任务调度

前言 在工作中使用到了定时任务,通过查找资料选择了xxjob,以下是xxjob的介绍以及基本的使用. xxjob介绍 XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。 将调度行为抽象形成“调度中心”公共平台,而平台自身…

OpenCV-Python系列(二)—— 图像处理(灰度图、二值化、边缘检测、高斯模糊、轮廓检测)

一、【灰度图、二值化】 import cv2 img cv2.imread("lz2.png") gray_img cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 灰度图 # 二值化,(127,255)为阈值 retval,bit_img cv2.threshold(gray_img, 127, 255, cv2.THRESH_BINARY) cv2.imshow(photo1,im…

Laravel框架03:DB类操作数据库

Laravel框架03:DB类操作数据库一、概述二、数据表的创建与配置三、增删改操作1. 增加信息2. 修改数据3. 删除数据四、查询操作1. 取出基本数据2. 取出单行数据3. 获取一个字段的值4. 获取多个字段的值5. 排序6. 分页五、执行任意的SQL语句一、概述 按照MVC的架构&a…

【R统计】R语言相关性分析及其可视化

💂 个人信息:酷在前行👍 版权: 博文由【酷在前行】原创、需要转载请联系博主👀 如果博文对您有帮助,欢迎点赞、关注、收藏 订阅专栏🔖 本文收录于【R统计】,该专栏主要介绍R语言实现统计分析的…

浅谈QWebChannel、QWebChannelAbstractTransport、QWebSocketServer、QWebSocket用法及之间关系

1.前言在现实业务中,经常遇到这样的需求:一端采用web形式开发的,如:客户端采用html、javascript、nodejs开发;而另一端采用C开发,如:Qt开发的服务端。web页面端需和Qt开发的服务端进行通信、数据…

房屋出租管理系统

1. 铺垫 1.1 项目真实开发的过程 上来要做什么???? 有电脑—》配环境(JDK、IDEA、MAVEN……) 这个项目:房屋管理系统 从什么角度出发,第一步做什么?? 架构 …

IoT项目系统架构案例2

项目背景 1.这个项目是对之前的案例的升级改造参考:IoT项目系统架构案例_iot案例_wxgnolux的博客-CSDN博客2.基于方案1的项目实施过程中碰到的问题,对硬件设备标准化的理念及新的功能需求(如根据天气预报温度调水温,APP界面可操作性优化等)•采用目前IoT主流厂商的架…

vue中render函数的作用和参数(vue2中render函数用法)

render 函数是 Vue2.x 新增的一个函数、主要用来提升节点的性能,它是基于 JavaScript 计算。使用 Render 函数将 Template 里面的节点解析成虚拟的 Dom 。Vue 推荐在绝大多数情况下使用模板来创建 HTML。然而在一些场景中,需要 JavaScript 的完全编程能力…

gitlab部署使用,jenkins部署使用

gitlab部署使用,jenkins部署使用gitlab下载gitlab安装gitlab使用gitlab设置中文修改管理员密码创建组,创建项目,创建用户jenkins下载jenkins安装jenkin使用jenkins更改管理员密码配置拉取代码配置登录gitlab拉取代码的账号密码配置项目配置gitlab仓库配置构建构建构…

CTFer成长之路之Python中的安全问题

Python中的安全问题CTF 1.Python里的SSRF 题目提示 尝试访问到容器内部的 8000 端口和 url path /api/internal/secret 即可获取 flag 访问url: http://f5704bb3-5869-4ecb-9bdc-58b022589224.node3.buuoj.cn/ 回显如下: 通过提示构造payload&…

Android 基础知识4-3.2 EditText(输入框)详解

一、EditText(输入框)介绍 EditText在开发中也是经常使用的控件,比如,要实现一个登录页面,需要用户输入账号、密码等信息,然后我们或得用户输入的内容,把它交给服务器来判断。因此,这…