删除链表的倒数第 N 个节点
删除链表的倒数第 N 个节点
1、参考资料
https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list/
2、题目要求
题目描述
给定一个链表,删除链表的倒数第 n
个节点,并且返回链表的头结点。
示例:
给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.
进阶:
你能尝试使用一趟扫描实现吗?
3、代码思路
这道题的思路和寻找链表倒数第 N
个节点的思路相似,使用双指针可以通过一趟遍历完成
- 不同的是寻找链表倒数第
N
个节点需要定位至倒数第K
个节点,而单链表的删除需要定位至待删除节点的前一个节点,即倒数第N+1
个节点 - 那么问题就来了,我如果想要删除链表的首节点怎么办?首节点可是没有前一个节点的呀,这时候头结点(
dummyHead
)就派上用场了,我们在原链表的基础上定义一个头结点dummyHead
,dummyHead
指向原链表的首节点(head
) - 我们定义两个指针:
front
指向链表前部,behind
指向链表后部,我们目标是当behind
指向null
的时候,front
指向倒数第N+1
个节点,此时通过front.next =f ront.next.next
即可删除倒数第N
个节点
边界条件的确定
因为我们需要定位至倒数第
N+1
个节点,所以front
与behind
始终相差N+1
个节点就拿下面的例子来说明,链表为
1 --> 2 --> 3 --> 4 --> 5
,我们需要删除倒数第2
个节点1 --> 2 --> 3 --> 4 --> 5 --> null
首先我们在链表前面加一个
dummyHead
,让front
指向dummyHead
,让behind
指向head
dummyHead --> 1 --> 2 --> 3 --> 4 --> 5 --> null^ ^| |front behind
behind
向后移动两步,即初始化时behind
指向head
,然后向后移动N
步dummyHead --> 1 --> 2 --> 3 --> 4 --> 5 --> null^ ^| |front behind
front
和behind
一起向后移动,直至behind
为空dummyHead --> 1 --> 2 --> 3 --> 4 --> 5 --> null^ ^| |front behind
front.next =f ront.next.next
删除倒数第2
个节点dummyHead --> 1 --> 2 --> 3 --> 5 --> null^ ^| |front behind
4、代码实现
代码
static class Solution {public ListNode removeNthFromEnd(ListNode head, int n) {// DummyHeadListNode dummyHead = new ListNode(0);dummyHead.next = head;ListNode front = dummyHead; // 初始化时 front 指向 dummyHeadListNode behind = head; // 初始化时 front 指向 head// behind 向后移动 n 步,保证 front 和 behind 相差 n+1 步int count = 0;for (; count < n && behind != null; count++) {behind = behind.next;}// 如果输入的 n 大于链表长度,则直接返回原链表if (count < n) {return head;}// front 和 bbehind 一起后移while (behind != null) {behind = behind.next;front = front.next;}// 删除倒数第 n 个节点front.next = front.next.next;// 返回新链表的首节点return dummyHead.next;}
}static class ListNode {int val;ListNode next;ListNode(int x) {val = x;}
}
删除链表的倒数第 N 个节点相关推荐
- 刻意练习:LeetCode实战 -- Task11. 删除链表的倒数第N个节点
背景 本篇图文是LSGO软件技术团队组织的 第二期基础算法(Leetcode)刻意练习训练营 的打卡任务.本期训练营采用分类别练习的模式,即选择了五个知识点(数组.链表.字符串.树.贪心算法),每个知 ...
- 19. 删除链表的倒数第N个节点
题目 给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点. 示例: 给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除了倒数第二个节点后,链表 ...
- 常考数据结构与算法:删除链表的倒数第n个节点
题目描述 给定一个链表,删除链表的倒数第n个节点并返回链表的头指针 例如, 给出的链表为:1->2->3->4->5, n= 2.删除了链表的倒数第n个节点之后,链表变为1-& ...
- python 删除链表中倒数第N个节点
| 删除链表中倒数第N个节点 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点. 输入:head = [1,2,3,4,5], n = 2 输出:[1,2,3,5] 示例 2: 输入: ...
- LeetCode第19题;删除链表的倒数第N个节点
19. 删除链表的倒数第N个节点 给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点. 示例: 给定一个链表: 1->2->3->4->5, 和 n = 2.当删 ...
- LeetCode19删除链表的倒数第N个节点20有效的括号
维护不易,还请点赞支持,微信搜索bigsai 回复进群一起打卡. 19删除链表的倒数第N个节点 给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点. 示例: 给定一个链表: 1-> ...
- 删除链表的倒数第N个节点—leetcode19
给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点. 示例: 给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除了倒数第二个节点后,链表变为 ...
- java 链表删除头结点,删除链表的倒数第N个节点,并返回链表的头节点
面试的时候遇到了一个笔试题,是leetcode的原题,原题的连接: https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list/ ...
- LeetCode-19 删除链表的倒数第N个节点
文章目录 题目描述 我的解法 反思 优化 再次反思 再次优化 总结 Github 题目描述 给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点. 示例: 给定一个链表: 1->2- ...
- 2019-03-18-算法-进化(删除链表的倒数第N个节点)
给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点. 示例: 给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1 ...
最新文章
- 软件架构自学笔记——非功能特性
- 9.5. SELINUX
- SAP BW数据源增强管理
- python 底层原理_Python字典的核心底层原理讲解
- 阿里技术官最新总结一份105道Java面试题小册,看完我惊呆了
- MySQL中函数CONCAT及GROUP_CONCAT 对应oracle中的wm_concat
- oracle数据库定时同步工具,[每天自动同步一个数据库表的数据]sql server定时同步oracle数据表...
- 【MyBatis框架】MyBatis入门程序第二部分
- 机器学习技法2-Dual Support Vector Machine
- Zoom视频会议软件
- linux打开txt文件命令_Linux文件操作,这些命令可以搞定
- Facebook上市或造千亿美元航母
- 广州白云国际机场IT信息化历程及信息化系统介绍
- 【运筹帷幄】网站打开慢故障排查思路
- 动态功能连接:前景、问题和解释
- Camera | 4.瑞芯微平台MIPI摄像头应用程序编写
- mybatis学习日志之总结
- 时钟MUX电路结构的时序约束方法分析
- 写一个判断素数的函数,在主函数输入一个整数,输出是否为素数的信息。
- 3D游戏建模布线方法
热门文章
- 电影屏幕行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
- 用计算机弹猪猪侠数字,猪猪侠之挑战数字
- IntelliJ IDEA 2018 破解 汉化教程地址
- kaggle比赛语言java_Kaggle调查:2018年数据科学家最常用(和最推荐)的编程语言榜单...
- 超400万用户的Chrome截图插件下架始末
- 曝荣耀仍未获得谷歌Android授权;诋毁鸿蒙的OPPO员工离职;微信圈子将停止运营|极客头条...
- 当跨国企业女职业经理人遇上创业女 CEO,两者会擦出什么样的火花?
- 蚂蚁回应渠道之争;微软更新致大规模服务中断;OpenSSH 8.4 发布|极客头条
- 新常态 新核心,浪潮商用机器为关键行业数字化转型打造新Power
- 中国数据库产业的“高地战事”