[每日算法 - 阿里机试] 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, 力扣 ...
随机推荐
- Kubernetes系列(四) - Pod和Pod调度
目录 1. Pod的组成部分 2. Pod的优势 3. Pod的两种分类 3.1 普通的pod 3.2 静态pod(static pod) 4. 控制器controller的特点 4.1 Deploy ...
- Docker安装Redis并设置密码
1. 镜像下载 docker pull redis 2. 创建目录 mkdir -p /etc/redis/redis.conf mkdir -p /data/redis 3. 启动容器 docker ...
- 基于 Admission Webhook 实现 Pod DNSConfig 自动注入
本文主要分享如何使用 基于 Admission Webhook 实现自动修改 Pod DNSConfig,使其优先使用 NodeLocalDNS . 1.背景 上一篇部署好 NodeLocal DNS ...
- biancheng-Spring Cloud Alibaba Sentinel
http://c.biancheng.net/springcloud/sentinel.html Sentinel 是由阿里巴巴中间件团队开发的开源项目,是一种面向分布式微服务架构的轻量级高可用流量控 ...
- 【隐私计算笔谈】MPC系列专题(十):安全多方计算下的集合运算
学习&转载文章:[隐私计算笔谈]MPC系列专题(十):安全多方计算下的集合运算 集合运算 集合可以通俗地描述为确定的一堆东西.如有一个集合\(\),一个元素\(\)要么属于集合\(\),记做\ ...
- RocketMQ原理—2.源码设计简单分析上
大纲 1.NameServer的启动脚本 2.NameServer启动时会解析哪些配置 3.NameServer如何初始化Netty网络服务器 4.NameServer如何启动Netty网络服务器 5 ...
- 个人数据保全计划:从印象笔记迁移到joplin
前言 最近在探索各种现代化的笔记工具时,刚好用上了Joplin这款应用,尽管界面没那么好看,但开源.支持markdown.功能完善,而且还支持很多导入方法(事实上很多开源笔记都支持). 其中的导入功能 ...
- js脚本实现文本文件格式批量转换
问题: 在Windows环境下,从某些软件中导出的文本格式的数据,选择了默认的ANSI格式.双击打开数据文件后,一切正常,没乱码问题.但是为什么自己的代码里,先按照ANSI格式打开,在转换为UTF8, ...
- 微信小程序如何更改appid
每一个吧小程序对应唯一一个appid; 但是在有些时候,我们需要更改appid; 点击详情,小程序右侧会出现下面的弹窗: 此时我们可以看见修改appid 这里修改了,才是真正的修改了: 这样我们上传微 ...
- DeepSeekV3+Roo Code,智能编码好助手
前言 硅基流动最近上线了deepseek-ai/DeepSeek-R1与deepseek-ai/DeepSeek-V3,感兴趣快来试试吧! 邀请注册得14元不过期额度:https://cloud.si ...
https://leetcode.cn/problems/remove-nth-node-from-end-of-list/description/