【12.28】转行小白历险记-刷算法04

news2024/11/28 0:44:08

01两两交换链表中的节点

整体思路 

1.要修改后一个节点的指向一定要知道前一个节点的指向才可以改变后面一个节点的

2.分情况奇数和偶数节点,终止条件很重要

3.虚拟头节点,是对我们操作的指针是不是头节点进行判断

02删除链表的倒数第N个节点

思路

1.双指针法,快指针先移动n步,然后慢指针移动,当两个相等的时候说明

代码逻辑

  1. 初始化

    let ret = new ListNode(0, head), slow = fast = ret;

    ret 是一个新创建的虚拟头节点,其 next 指向链表的实际头节点 head。这样做是为了简化头节点删除的边界情况处理。

    • slowfast 是两个指针,初始时都指向这个虚拟头节点。
  2. 移动 fast 指针

    while(n--) fast = fast.next;

    fast 指针先向前移动 n 步。这样做是为了创建一个 fastslow 之间有 n 个节点的间隔。

  3. 同时移动 fastslow 指针

    while (fast.next !== null) 
    { fast = fast.next; slow = slow.next; }
    • 然后同时移动 fastslow 指针,直到 fast 指针指向最后一个节点。此时,slow 指针将指向需要删除节点的前一个节点。
  4. 删除节点

    slow.next = slow.next.next;

    修改 slow.next,使其跳过下一个节点(即要删除的节点),直接指向下下一个节点。

  5. 返回修改后的链表头节点

    return ret.next;

    由于 ret 是虚拟头节点,其 next 指向原链表的头节点或新的头节点(如果头节点被删除)。因此,返回 ret.next 就是返回删除指定节点后的链表头节点。

总结

这个函数利用快慢指针技巧来定位并删除链表中倒数第 n 个节点。使用虚拟头节点简化了对头节点的特殊处理,使得算法能够统一处理所有情况。

03环形链表

代码逻辑

  1. 初始化

    if (!head || !head.next) return null;
    let slow = head.next, fast = head.next.next;

    首先检查链表是否至少有两个节点(否则环不可能存在)。然后初始化两个指针:slow 每次向前移动一个节点,fast 每次向前移动两个节点

  2. 检测环

    while (fast && fast.next && fast !== slow)
    { slow = slow.next; fast = fast.next.next; }

    这个循环继续执行直到 fastslow 相遇,或者 fast 到达链表末尾(这意味着链表中没有环)。如果 fastslow 相遇,说明链表中存在环。

  3. 确定环的入口

    if (!fast || !fast.next) return null; 
    slow = head; 
    while (fast !== slow) 
    { slow = slow.next; fast = fast.next; }

    如果链表中存在环,将 slow 重置到头节点,然后 slowfast 同时每次向前移动一个节点,直到它们再次相遇。它们相遇的节点就是环的入口。

  4. 返回环的入口节点

    return slow;

    返回找到的环的入口节点。

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

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

相关文章

大数据与人工智能|万物皆算法(第三节)

要点一:数据与智能的关系 1. 一切的核心都是数据,数据和智能之间是密切相关的。 数据是对客观现实的描述,而信息是数据转化而来的。 例如,24是数据,但说“今天的气温是24摄氏度”是信息,而说“班可以分成24…

oracle与mysql的分析函数(窗口函数)

分析函数定义 在SQL语句中,很多查询语句需要进行GROUP BY分组汇总,但是一旦经过分组,SELECT返回的记录数就会减少。为了保留所有原始行记录,并且仍可以进行分组数据分析,分析函数应运而生。 Oracle 8i 版本开始支持窗…

java在线票务系统(选座)Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java servlet 在线票务系统(选座)管理系统是一套完善的java web信息管理系统 系统采用serlvetdaobean(mvc模式),对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要…

MongoDB主从复制,一文打尽!

📢📢📢📣📣📣 哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】!😜&am…

Hadoop安装笔记2单机/伪分布式配置_Hadoop3.1.3——备赛笔记——2024全国职业院校技能大赛“大数据应用开发”赛项——任务2:离线数据处理

紧接着上一篇博客:Hadoop安装笔记1: Hadoop安装笔记1单机/伪分布式配置_Hadoop3.1.3——备赛笔记——2024全国职业院校技能大赛“大数据应用开发”赛项——任务2:离线数据处理-CSDN博客https://blog.csdn.net/Zhiyilang/article/details/135…

K8s实战-基于LivenessProbe健康检查

LivenessProbe探针用于判断容器是否存活,如果探测到容器不健康,则kubelet将杀掉该容器,然后根据重启策略处理。 LivenessProbe的实现方式: ExecAction:在容器内部执行一个命令,如果该命令的返回码为0&…

右键菜单“以notepad++打开”,在windows文件管理器中

notepad 添加到文件管理器的右键菜单中 找到安装包,重新安装一般即可。 这里有最新版:地址 密码:f0f1 方法 在安装的时候勾选 “Context Menu Entry” 即可 Notepad的右击打开文件功能 默认已勾选 其作用是添加右键快捷键。即,对于任何…

定期修改公司数据协议的重要性

目录 ​编辑 为公司和客户数据提供更好的安全性 利用现代数据分析工具 标准化您的数据收集流程 改善数据的使用 增强您的营销和销售活动 定义数据分类指南 创建更具凝聚力和协作性的团队 遵守法律法规 结论 企业主可以使用许多对其成功至关重要的工具&#…

【UE5.1】程序化生成Nanite植被

目录 效果 步骤 一、下载Gaea软件和树林资产 二、使用Gaea生成贴图 三、 生成地形 四、生成草地 五、生成树林 六、生成湖泊 七、其它功能介绍 7.1 调整树林生成的面积 7.2 让植物随风飘动 7.3 玩家和植物互动 7.4 雪中树林 7.5 环境音效 效果 步骤 一、下载Ga…

图的操作实验

图的操作 一、 实验目的 (1)掌握图的邻接矩阵和邻接表存储结构。 (2)熟练图的邻接表的基本运算。 (3)加深图的深度优先遍历算法和广度优先遍历算法的理解。 (4)领会最小生成树和…

Spring高手之路-Spring事务的传播机制(行为、特性)

目录 含义 七种事务传播机制 1.REQUIRED(默认) 2.REQUIRES_NEW 3.SUPPORTS 4.NOT_SUPPORTED 5.MANDATORY 6.NEVER 7.NESTED 含义 事务的传播特性指的是当一个事务方法被另一个事务方法调用时,这个事务方法应该如何进行? 七…

Clion 项目使用dbg-macro控制台输出ANSI转义,输出颜色文本。

#Clion如何输出ANSI转义 首先源于,引入dbg-macro后,运行发现控制台全部是 C:\Users\WuXiangGuJun\CodeSpace\ClionCodeProjects\Tina\cmake-build-debug\tests\tests.exe ?[02m[..a\tests\src\main.cpp:16 (main)] ?[0m?[36mmessage?[0m ?[01m&q…

【计算机网络实验】educoder实验八 IPV6网络及其路由 头歌

第一关 IPV6网络基础 //千万不要破坏文档原有结构与内容!!! //以下均为判断题,F:表示错误,T:表示正确 //答案必须写在相应行末尾括号内,F与T二选一,大写 // 1、ipv6协议…

element el-table实现可进行横向拖拽滚动

【问题】表格横向太长,表格横向滚动条位于最底部,需将页面滚动至最底部才可左右拖动表格,用户体验感不好 【需求】基于elment的el-table组件生成的表格,使其可以横向拖拽滚动 【实现】灵感来源于这篇文章【Vue】表格可拖拽滚动&am…

《数据库开发实践》之触发器

一、什么是触发器? 1.概念: 简单来说触发器就是一种特殊的存储过程,在数据库服务器触发事件的时候会自动执行其SQL语句集。 2.构成四要素: (1)名称:要符合标识符命名规则 (2&am…

idea 如何快速拉取新分支

方式1 (快捷键:CtrlShift~) 方式2:(快捷键:Alt9)

小梅哥Xilinx FPGA学习笔记18——专用时钟电路 PLL与时钟向导 IP

目录 一:IP核简介(具体可参考野火FPGA文档) 二: 章节导读 三:PLL电路原理 3.1 PLL基本实现框图 3.2 PLL倍频实现 3.3 PLL分频实现 四: 基于 PLL 的多时钟 LED 驱动设计 4.1 配置 Clocking Wizard 核 4.2 led …

详解结构体(包含结构体内存对齐,柔性数组,位段)【尊嘟很详细】

​ 结构体 结构体是一些值的集合,这些值称为成员变量,结构的成员可以是标量、数组、指针,甚至是其他结构体。 成员名可以与程序中其它变量同名,互不干扰。 结构体的定义 (struct结构名{}) struct books {int a;c…

Aseprite编译

官方网站 : https://www.aseprite.org/ Aseprite编译 步骤 : 1> App Store 下载安装 XCode 2> 安装 brew # /bin/bash -c "$(curl -fsSL https://gitee.com/ineo6/homebrew-install/raw/master/install.sh)" 或 # /bin/zsh -c "$(curl -fsSL https://g…

处理HTTP错误响应:Go语言中的稳健之道

开场白:在Web开发中,HTTP错误响应是不可避免的一部分。当请求无法成功完成时,服务器会返回一个错误响应。今天,我们将深入探讨如何在Go语言中优雅地处理这些HTTP错误响应。 知识点一:HTTP错误响应的常见类型HTTP错误响…