[每日算法 - 阿里机试] leetcode19. 删除链表的倒数第 N 个结点 「 详细图释一看就懂!」
入口
题目描述
给你一个链表,删除链表的倒数第
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]提示:
- 链表中结点的数目为
sz1 <= sz <= 300 <= Node.val <= 1001 <= n <= sz
方法一:栈
- 链表顺序入栈
- 将链表后n个节点出栈
- 获取需要删除的第n个元素,变更next
- 返回虚拟节点dummy.next即可
图示
图示,n=2
Java实例
class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
// 定义虚拟节点
ListNode dummy = new ListNode(0, head);
Deque<ListNode> stack = new LinkedList<ListNode>();
// 防止需要删除节点为头节点时的空指针异常,将虚拟节点推入栈中
stack.push(dummy);
// 将链表中的每个节点推入栈中
while (head != null) {
stack.push(head);
head = head.next;
}
// 弹出栈中的前n个节点,使栈顶元素为倒数第n个节点的前一个节点
for (int i = 0; i < n; i++) {
stack.pop();
}
// 获取倒数第n个节点的前一个节点
ListNode pre = stack.peek();
// 将前一个节点的next指针跳过倒数第n个节点,直接指向倒数第n个节点的下一个节点
pre.next = pre.next.next;
// 返回虚拟节点的下一个节点作为新链表的头节点
return dummy.next;
}
}
复杂度分析
时间复杂度:O(L), L 是链表的长度。
空间复杂度:O(L), L 是链表的长度,主要为栈的开销。
方法二:双指针
使用快慢指针的方式,快指针与慢指针相差n-1,即快指针比慢指针超前了 n 个节点。 两个指针同时遍历链表,当快指针指向null时,此时慢指针正好指向倒数第n个元素的前一个元素。
图示,n=2
Java示例
class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
// 定义虚拟节点
ListNode dummy = new ListNode(0, head);
ListNode first = head;
ListNode second = dummy;
// 将第一个指针向前移动 n 步
for (int i = 0; i < n; i++) {
first = first.next;
}
// 同时移动第一个和第二个指针,直到第一个指针为空
while (first != null) {
first = first.next;
second = second.next;
}
// 此时第一个指针到达链表尾,second 正好指向倒数第 n 个元素的前一个节点
// 将前一个节点的 next 指针跳过倒数第 n 个节点,直接指向倒数第 n 个节点的下一个节点
second.next = second.next.next;
// 返回虚拟节点的下一个节点作为新链表的头节点
return dummy.next;
}
}
复杂度分析
时间复杂度:O(L),L 是链表的长度。
空间复杂度:O(1)。
[每日算法 - 阿里机试] leetcode19. 删除链表的倒数第 N 个结点 「 详细图释一看就懂!」的更多相关文章
- 2021字节跳动校招秋招算法面试真题解题报告--leetcode19 删除链表的倒数第 n 个结点,内含7种语言答案
2021字节跳动校招秋招算法面试真题解题报告--leetcode19 删除链表的倒数第 n 个结点,内含7种语言答案 1.题目描述 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点. ...
- 【算法训练营day4】LeetCode24. 两两交换链表中的结点 LeetCode19. 删除链表的倒数第N个结点 LeetCode面试题 02.07. 链表相交 LeetCode142. 环形链表II
[算法训练营day4]LeetCode24. 两两交换链表中的结点 LeetCode19. 删除链表的倒数第N个结点 LeetCode面试题 02.07. 链表相交 LeetCode142. 环形链表 ...
- 打败算法 —— 删除链表的倒数第n个结点
本文参考 出自LeetCode上的题库 -- 删除链表的倒数第n个结点,官方的双指针解法没有完全符合"只遍历一遍链表"的要求,本文给出另一种双指针解法 https://leetco ...
- 四种语言刷算法之删除链表的倒数第 N 个结点
力扣19. 删除链表的倒数第 N 个结点 1.C /** * Definition for singly-linked list. * struct ListNode { * int v ...
- 动图:删除链表的倒数第 N 个结点
本文主要介绍一道面试中常考链表删除相关的题目,即 leetcode 19. 删除链表的倒数第 N 个结点.采用 双指针 + 动图 的方式进行剖析,供大家参考,希望对大家有所帮组. 19. 删除链表的倒 ...
- 19. 删除链表的倒数第 N 个结点
目录 19.删除链表的倒数第N个节点 题目 题解-暴力 题解-哈希表 题解-双指针 19.删除链表的倒数第N个节点 题目 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点. 输入:he ...
- 【力扣】19. 删除链表的倒数第 N 个结点
给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点. 进阶:你能尝试使用一趟扫描实现吗? 示例 1: 输入:head = [1,2,3,4,5], n = 2输出:[1,2,3,5]示例 ...
- 【链表】【leetCode高频】: 19. 删除链表的倒数第 N 个结点
1.题目描述 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点. 2.算法分析 知识补充: . 分析: 题目要求是删除链表中倒数第N个结点.可以使用两个指针slow,fast. 重点是 ...
- [Swift]LeetCode19. 删除链表的倒数第N个节点 | Remove Nth Node From End of List
Given a linked list, remove the n-th node from the end of list and return its head. Example: Given l ...
- 【LeetCode】19. Remove Nth Node From End of List 删除链表的倒数第 N 个结点
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 个人公众号:负雪明烛 本文关键词:链表, 删除节点,双指针,题解,leetcode, 力扣 ...
随机推荐
- 优化博客Ⅰ-压缩图片为webp格式
自动压缩博客图片为webp格式 作为自己的个人博客,我非常喜欢搞一些花里胡哨的东西,其中就包括不少精美图片,但是过多的图片会占用大量的网络资源导致博客加载速度变慢. 那怎么办呢? 第一个想到的就是升级 ...
- map循环如何跳出循环
今天在开发的时候遇到了一个问题.就是想在使用map的时候跳出循环无法实现,于是就在网上搜寻了一番,说map本身不能跳出循环,有一个大佬提出了抛出异常的方法,记录一下 let list=[1,2,3,4 ...
- linux 安装 Ollama 框架
概述 Ollama 是一款旨在简化大语言模型(LLM)本地部署的工具,支持 Windows.Linux 和 MacOS 系统.它提供了一个用户友好的环境,让开发者可以轻松地运行和调优如 Qwen.Ll ...
- (二).NET6.0使用Filter过滤器
1.创建一个webapi方法 2.创建过滤器,继承自Attribute, IAsyncActionFilter 不存在需要先手动引用有关的包:Microsoft.AspNetCore.Mvc 继承 A ...
- Note -「基本子串结构」速通笔记
学习自 crashed 的<一类基础子串数据结构>摘抄及注解, 略过了一些 crashed 口中 "用不上" 的东西. 这里是速通笔记, 希望快速学习技巧的读者可以 ...
- 实现windows下简单的自动化窗口管理
转载或者引用本文内容请注明来源及原作者 一.问题描述 用户的应用场景非常简单:一个无主播的线上弹幕游戏,需要定时开启和关闭直播,直播平台是在Windows端的某播伴侣. 二.分析需求 首先需要定时任务 ...
- 2020年最新消息中间件MQ与RabbitMQ面试题-copy
为什么使用MQ?MQ的优点 简答 异步处理 - 相比于传统的串行.并行方式,提高了系统吞吐量. 应用解耦 - 系统间通过消息通信,不用关心其他系统的处理. 流量削锋 - 可以通过消息队列长度控制请求量 ...
- oracle goldengate for downstreams 配置--for 数据库参数配置和ogg进程参数配置
1.整体数据库配置三个源端和一个downstream下游抽取数据库配置:alter system set enable_goldengate_replication=TRUE;Alter databa ...
- 从拼积木到最长连续序列:一道别出心裁的数组题目|LeetCode 128 最长连续序列
LeetCode 128 最长连续序列 点此看全部题解 LeetCode必刷100题:一份来自面试官的算法地图(题解持续更新中) 生活中的算法 你小时候一定玩过数字积木吧?一堆写着不同数字的积木块散落 ...
- JMeter组件的执行顺序和作用域
组件介绍 测试计划:jmeter的起点和容器 线程组:代表一定的虚拟用户 取样器:发送请求的最小单元 逻辑控制器:控制组件的执行顺序 前置处理器:在请求之前的操作 后置处理器:在请求之后的操作 断言: ...
https://leetcode.cn/problems/remove-nth-node-from-end-of-list/description/