[每日算法 - 阿里机试] 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, 力扣 ...
随机推荐
- Android增加USB Camera摄像头驱动支持
一般情况下kernel需要添加以下宏 ================================= CONFIG_VIDEO_DEV=yCONFIG_VIDEOBUF2_CORE=yCONFIG ...
- 优化永不止步:TinyVue v3.20.0 正式发布,更美观的官网UI,更友好的文档搜索,更强大的主题配置能力~
你好,我是 Kagol,个人公众号:前端开源星球. 我们非常高兴地宣布,2024年12月4日,TinyVue 发布了 v3.20.0 . 本次 3.20.0 版本主要有以下重大变更: OpenTiny ...
- ofd文件拆分合并思路探索 -- 附下载程序
前言 ofd文件拆分合并会在多个场合用到,但市面上此类工具并不多.拆分和合并虽然为两个功能,但从编程角度考虑,其处理思路有相同之处.文章就以合并为例,讲一下处理思路.作者也写了一个拆分合并小工具 ...
- websocket-sharp:.NET平台上的WebSocket客户端与服务器开源库
推荐一个C#开发的,实现WebSocket功能的开源项目. 01 项目简介 websocket-sharp提供 WebSocket 客户端和服务器库,基于 C# 开发的,并遵循 WebSocket 协 ...
- JS播放m3u8
JS播放m3u8: 利用 hls.min.js <!DOCTYPE html> <html> <head> <title>HLS Video Playb ...
- ffmpeg 视频修复和调整频率和码率
视频修复ffmpeg -err_detect ignore_err -i input.mp4 -vcodec copy -acodec copy repaired_video.mp4 -y 调整频率和 ...
- Dibble pg walkthrough Intermediate
nmap 21/tcp open ftp vsftpd 3.0.3 | ftp-anon: Anonymous FTP login allowed (FTP code 230) |_Can't get ...
- 接口性能测试---locust脚本编写(一)
本文分享自天翼云开发者社区<接口性能测试---locust脚本编写(一)>,作者:丁****乐 一.安装 locust是用python编写的一款开源接口性能测试工具,以python3为例, ...
- 天翼云加速落地紫金DPU实践应用,让算力供给更高效!
近日,以"智驱创新·芯动未来"为主题的第三届DPU峰会在北京成功举办.会上,天翼云凭借紫金DPU在架构革新.算力释放.场景落地等多方面的成果,荣膺"2023芯星品牌奖&q ...
- oracle开启了审计功能,导致sysaux表空间满的问题
查询是否开启审计功能 SQL> show parameter audit 如下图所示: AUDIT_TRAIL参数用于指定数据库审计跟踪信息的记录方式.它接受三个可能的参数:NONE,DB,OS ...
https://leetcode.cn/problems/remove-nth-node-from-end-of-list/description/