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

news2024/11/18 9:27:53

基础知识要求:

Java:方法、while循环、for循环

Python: 方法、while循环、for循环

题目: 

给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。

示例 1:

输入:head = [1,2,3,4,5], n = 2
输出:[1,2,3,5]

示例 2:

输入:head = [1], n = 1
输出:[]

示例 3:

输入:head = [1,2], n = 1
输出:[1]

提示:

  • 链表中结点的数目为 sz
  • 1 <= sz <= 30
  • 0 <= Node.val <= 100
  • 1 <= n <= sz

思路解析:

  1. 创建哑节点(Dummy Node)
    • 为了方便处理头节点的删除情况,我们通常在链表头部添加一个哑节点。哑节点本身不存储任何数据,只是它的next指针指向链表的头节点。这样,无论我们要删除的是头节点还是其他节点,我们都可以统一处理。
  2. 初始化快慢指针
    • 我们有两个指针,一个快指针fast和一个慢指针slow,都初始化为哑节点。
  3. 快指针先走n步
    • 我们让快指针先向前走n步,这样快指针和慢指针之间就拉开了n个节点的距离。
  4. 快慢指针同时移动
    • 接着,我们让快慢指针同时向前移动。当快指针到达链表末尾(即fast.nextNone)时,慢指针slow就指向了倒数第n+1个节点(因为我们要删除的是倒数第n个节点)。
  5. 删除倒数第n个节点
    • 此时,我们只需要将慢指针的next指针指向下下个节点(即slow.next.next),就可以删除倒数第n个节点了。
  6. 返回结果
    • 因为我们使用了哑节点,所以最终返回的是哑节点的next指针,也就是修改后的链表的头节点。

快慢指针示例解释:

以输入head = [1,2,3,4,5], n = 2为例:

  • 初始状态:
    • 哑节点:0 -> 1 -> 2 -> 3 -> 4 -> 5
    • fastslow都指向哑节点。
  • 快指针先走2步:
    • fast现在指向2slow仍然指向哑节点。
  • 快慢指针同时移动:
    • fast到达末尾5时,slow指向3
  • 删除倒数第2个节点(即4):
    • 我们将slow.next指向5,从而删除了4
  • 返回结果:
    • 返回哑节点的next,即修改后的链表0 -> 1 -> 2 -> 3 -> 5(注意,我们实际返回的是1 -> 2 -> 3 -> 5,因为哑节点不包含在结果中)。

Java代码示例:

public class ListNode {  
    int val;  
    ListNode next;  
    ListNode(int x) { val = x; }  
}  
  
public class Solution {  
    public ListNode removeNthFromEnd(ListNode head, int n) {  
        // 创建一个哑节点(dummy node),指向头节点,方便处理头节点的删除  
        ListNode dummy = new ListNode(0);  
        dummy.next = head;  
  
        // 快慢指针初始化  
        ListNode fast = dummy;  
        ListNode slow = dummy;  
  
        // 快指针先向前走n步  
        for (int i = 0; i < n; i++) {  
            fast = fast.next;  
        }  
  
        // 快慢指针同时向前移动,直到快指针到达链表末尾  
        while (fast.next != null) {  
            fast = fast.next;  
            slow = slow.next;  
        }  
  
        // 删除慢指针指向的下一个节点(即倒数第n个节点)  
        slow.next = slow.next.next;  
  
        // 返回头节点(哑节点的下一个节点)  
        return dummy.next;  
    }  
}

Python代码示例:

class ListNode:  
    def __init__(self, val=0, next=None):  
        self.val = val  
        self.next = next  
  
def removeNthFromEnd(head: ListNode, n: int) -> ListNode:  
    # 创建一个哑节点(dummy node),指向头节点,方便处理头节点的删除  
    dummy = ListNode(0)  
    dummy.next = head  
      
    # 快慢指针初始化  
    fast = slow = dummy  
      
    # 快指针先向前走n步  
    for _ in range(n):  
        fast = fast.next  
      
    # 快慢指针同时向前移动,直到快指针到达链表末尾  
    while fast.next:  
        fast = fast.next  
        slow = slow.next  
      
    # 删除慢指针指向的下一个节点(即倒数第n个节点)  
    slow.next = slow.next.next  
      
    # 返回头节点(哑节点的下一个节点)  
    return dummy.next

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

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

相关文章

【C/C++笔试练习】DNS劫持、三次握手、TCP协议、HTTPS、四次挥手、HTTP报文、拥塞窗口、POP3协议、UDP协议、收件人列表、养兔子

文章目录 C/C笔试练习选择部分&#xff08;1&#xff09;DNS劫持&#xff08;2&#xff09;三次握手&#xff08;3&#xff09;TCP协议&#xff08;4&#xff09;HTTPS&#xff08;5&#xff09;四次挥手&#xff08;6&#xff09;HTTP报文&#xff08;7&#xff09;拥塞窗口&a…

宿舍管理系统代码详解(主页面)

本篇将对管理系统的主页面的代码进行详细的介绍。 目录 一、主页面前端代码 1.样式展示 2.代码详解 &#xff08;1&#xff09;template部分 &#xff08;2&#xff09;script部分 &#xff08;3&#xff09;路由导航守卫 &#xff08;4&#xff09;在vue中引用vue 一、主页…

富唯智能复合机器人:CNC铝块上下料安全新标准

在CNC铝块加工过程中&#xff0c;上下料环节的安全问题一直是企业关注的焦点。富唯智能复合机器人的应用&#xff0c;为这一环节树立了新的安全标准。 传统的上下料方式往往依赖于人工操作&#xff0c;存在着较大的安全隐患。而富唯智能复合机器人采用先进的视觉识别技术和精准…

Charger之二输入电压动态电源原理(VIN-DPM)

主要内容 Charger的VIN-DPM 前篇内容&#xff1a;电池管理IC&#xff08;Charger&#xff09;了解一下&#xff1f; 领资料&#xff1a;点下方↓名片关注回复&#xff1a;粉丝群 正文 一、 VIN-DPM概念 VIN-DPM是指输入电压动态电源管理&#xff08;Input voltage dynamic…

全栈开发之路——前端篇(9)插槽、常用api和全局api

全栈开发一条龙——前端篇 第一篇&#xff1a;框架确定、ide设置与项目创建 第二篇&#xff1a;介绍项目文件意义、组件结构与导入以及setup的引入。 第三篇&#xff1a;setup语法&#xff0c;设置响应式数据。 第四篇&#xff1a;数据绑定、计算属性和watch监视 第五篇 : 组件…

OpenAI 把超强AI带进日常,GPT-4o 让机器也懂情感!

一、前言 ⭐⭐ 立即体验&#xff1a;GPT-4o OpenAI 在春季发布会上推出了名为 GPT-4o 的旗舰级生成式人工智能模型&#xff0c;这一模型的发布不仅标志着技术的巨大飞跃&#xff0c;更预示着人机交互方式的全面革新。"o" 在 GPT-4o 中代表 "omni"&#xf…

Codeforces Round 944 (Div. 4)(A,B,C,D,E,F,G,H)

比赛链接 这场不难&#xff0c; G G G 和 H H H 比较有意思。 G G G 题需要一定的二进制和数据结构的知识&#xff0c; H H H 题是个 2 − s a t 2-sat 2−sat 的题&#xff0c;算法名字吓人但是其实很简单&#xff0c;题目本身也很板&#xff0c;建议趁机学习一波。 A. My …

vue获取路由的值

1&#xff0c;此方法获取到请求地址后面的值 如 /name123&age12 2&#xff0c;此方法获取到请地址&#xff1f;后面的值 例如?name123&age12 二者的区别&#xff0c;第一个是直接在路径后面拼接&#xff0c;第二种就是正规的http请求。 路径带&#xff1f;号的

Ajax 学习

文章目录 1. 前置知识1.1 ajax 介绍1.2 XML 简介 2. AJAX 学习2.1 AJAX基础学习&#xff08;1&#xff09;AJAX的特点&#xff08;2&#xff09;AJAX 初体验&#xff08;3&#xff09;服务端响应json 数据 2.2 IE 缓存问题2.3 请求超时和网络异常2.4 手动取消请求2.5 重复请求2…

使用DBeaver的第2天-使用sql导入数据

使用sql导入数据这块我会仔细的说一下 首先位置一定要放在库上&#xff08;实例&#xff09;&#xff0c;放在表上可不好使用哦 然后点击工具-再点击执行脚本 这样就执行成功了 但是如果你执行失败了&#xff0c;多半可能是因为本地没有部署mysql&#xff0c;记住只有本地有…

搜索引擎的设计与实现(四)

目录 6 系统测试 6.1测试重要性 6.2测试用例 结 论 参 考 文 献 前面内容请移步 搜索引擎的设计与实现&#xff08;三&#xff09; 免费源代码&毕业设计论文 搜索引擎的设计与实现 6 系统测试 6.1测试重要性 该项目是在本地服务器上进行运行和调试&#xff0c;…

BOM部分

一&#xff0c;概述 二&#xff0c;Windows对象常见的事件 1.窗口加载事件 上面那个是会等页面都加载完了&#xff0c;在进行函数的调用或者触发事件&#xff0c;如&#xff08;图像&#xff0c;文本&#xff0c;css&#xff0c;js等&#xff09;&#xff0c;所以那个声明可以…

IT行业找工作十面十败,不妨试试鸿蒙开发岗~

近期某脉上看到这样一则帖子&#xff0c;讨论的非常激烈&#xff01; 相信也有不少人有和他这情况类似&#xff0c;像他这种失业的状态&#xff0c;近两年大家或多或少都深有体验。由于互联网行业进过了十几年的快速发展&#xff0c;从2G→3G→4G→5G&#xff0c;在这个期间人们…

Linux基础之进程-进程状态

目录 一、进程状态 1.1 什么是进程状态 1.2 运行状态 1.2 阻塞状态 1.3 挂起状态 二、Linux操作系统上具体的进程状态 2.1 状态 2.2 R 和 S 状态的查看 2.3 后台进程和前台进程 2.4 休眠状态和深度休眠状态 一、进程状态 1.1 什么是进程状态 首先我们知道我们的操作系…

未来互联网:Web3的技术革新之路

引言 随着技术的不断发展和社会的日益数字化&#xff0c;互联网作为信息交流和社交媒介的重要平台已经成为我们生活中不可或缺的一部分。然而&#xff0c;传统的互联网架构在数据安全、隐私保护和去中心化等方面存在着诸多挑战。为了解决这些问题&#xff0c;Web3技术应运而生…

【js】获取媒体流实现拍照功能,摄像头切换

<script setup>import {onMounted,reactive,ref} from vueconst videoConstraints reactive({width: 500,height: 300});let picArr reactive([])let videoNode ref(null)let show ref(true)let stream reactive({})onMounted(async () > {// 获取视频流&#xf…

C++语法|深入理解 new 、delete

在开发过程中&#xff0c;非常重要的语法就有我们new和delete&#xff0c;周所周知在C中最为强大的能力就是对内存的控制&#xff0c;所以我们再怎么强调new和delete都不为过 文章目录 1.new和delete基本语法new和malloc的区别是什么&#xff1f;(1)开辟单个元素的内存差别(2)开…

Python专题:十三、日期和时间(2)

datetime 模块 today()函数 date类型 year month day

摊还分析

一、摊还分析 概念&#xff1a;是求数据结构中一个操作序列执行所有操作的平均时间&#xff0c;与平均复杂度不同&#xff0c;它不涉及输入概率&#xff0c;能够保证在最坏情况下操作的平均性能。 适用场景&#xff1a;用含 n 个操作的序列&#xff08;o1&#xff0c;o2&#x…

互联网轻量级框架整合之HibernateMyBatis

持久层框架 Hibernate 假设有个数据表&#xff0c;它有3个字段分别是id、rolename、note, 首先用IDEA构建一个maven项目Archetype选择org.apache.maven.archetypes:maven-archetype-quickstart即可&#xff0c;配置如下pom <project xmlns"http://maven.apache.org/…