当前位置: 首页 > article >正文

LeetCode热题100--19.删除链表的倒数第N个结点--中等

1. 题目

给你一个链表,删除链表的倒数第 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]

2. 题解

/*** Definition for singly-linked list.* public class ListNode {*     int val;*     ListNode next;*     ListNode() {}*     ListNode(int val) { this.val = val; }*     ListNode(int val, ListNode next) { this.val = val; this.next = next; }* }*/
class Solution {public ListNode removeNthFromEnd(ListNode head, int n) {ListNode dummy = new ListNode(0);dummy.next = head;int length = 0;ListNode current = head;while( current != null){length++;current = current.next;}int index = length - n;current = dummy;for(int i = 0; i < index; i++){current = current.next;}current.next = current.next.next;return dummy.next;}
}

3. 解析

出自:沉默王二

  1. public ListNode removeNthFromEnd(ListNode head, int n) {…} 这是一个名为removeNthFromEnd的方法,它接受两个参数head和n,分别代表链表头部和要移除的节点的索引。

  2. 2-5: ListNode dummy = new ListNode(0); dummy.next = head; int length = 0; ListNode current = head; while(current != null){length++; current = current.next;} 这是初始化部分,创建了一个新的虚拟节点dummy并将其链接到原始头部。然后计算了链表的长度。

  3. 6-10: int index = length - n; current = dummy; for(int i = 0; i < index; i++){current = current.next;} 这是寻找要移除节点的前一个节点的部分,通过遍历到正确的索引位置。

  4. 11: current.next = current.next.next; 这行代码是实际的移除操作,将倒数第n个节点与其后面的节点断开连接,从而将其从链表中移除。

  5. 12: return dummy.next; 最后返回的是新的头部(可能已经发生了改变)。这是因为我们在原始链表的头部之前添加了一个虚拟节点dummy来处理边界情况(例如当我们需要删除的是第一个元素时),所以在最终结果中不会丢失任何信息。

  6. 整个函数的作用是从给定的链表中移除倒数第n个节点并返回修改后的头部。它首先计算出链表的长度,然后找到要删除的节点的前一个节点的位置,最后进行实际的删除操作。这种方法的时间复杂度为O(N),其中N是链表的长度。

http://www.lryc.cn/news/2386318.html

相关文章:

  • 开发AR导航助手:ARKit+Unity+Mapbox全流程实战教程
  • git学习与使用(远程仓库、分支、工作流)
  • 嵌入式预处理链接脚本lds和map文件
  • 9. Spring AI 各版本的详细功能与发布时间整理
  • 《Android 应用开发基础教程》——第十四章:Android 多线程编程与异步任务机制(Handler、AsyncTask、线程池等)
  • Apache 高级配置实战:从连接保持到日志分析的完整指南
  • 开源 OIDC(OpenID Connect)身份提供方(IdP)、iam选型
  • Android OkHttp控制链:深入理解网络请求的流程管理
  • 【JVM 01-引言入门篇】
  • Pandas数据规整
  • ThreadLocal线程本地变量在dubbo服务使用时候遇到的一个坑
  • pga 作用
  • setup.py Pip wheel
  • GO 语言进阶之 时间处理和Json 处理
  • 对WireShark 中的UDP抓包数据进行解析
  • Flannel后端为UDP模式下,分析数据包的发送方式(二)
  • 从 0 到 1:Spring Boot 与 Spring AI 深度实战(基于深度求索 DeepSeek)
  • upload-labs通关笔记-第20关 文件上传之杠点绕过
  • Vscode +Keil Assistant编译报错处理
  • 记录python在excel中添加一列新的列
  • WebRTC:实时通信的未来之路
  • 探索产品经理的MVP:从概念到实践
  • 用python实现中国象棋
  • GO 语言基础3 struct 结构体
  • VSCode C/C++ 开发环境完整配置及一些扩展用途(自用)update:2025/3/31
  • iOS 上线前的性能与稳定性检查流程实录:开发者的“最后一公里”(含 KeyMob 应用经验)
  • Docker系列(二):开机自启动与基础配置、镜像加速器优化与疑难排查指南
  • a16z:AI带来了全新的9种开发软件的模式
  • 20.迭代器模式:思考与解读
  • Java 学习笔记:注解、泛型与 IO 流