算法-删除链表的倒数第N个节点
思路
双指针,快指针先走n次,保持快慢指针直接的间距是n
然后快慢指针同时后移,快指针为null时,满指针后一个就是要删除的节点。
关键点
哨兵节点,减少特殊节点的判断
代码
Node
逻辑
package leetcode.linked;
import leetcode.ListNode;
/**
* 给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。
* <p>
* 给定一个链表: 1->2->3->4->5, 和 n = 2.
* <p>
* 当删除了倒数第二个节点后,链表变为 1->2->3->5.
*/
public class N19 {
/**
* 使用哨兵节点的原因在于减少边界条件的判断,如12345 取倒数第5个
* 如果没有哨兵节点,倒数第五个就是首节点,需要额外判断
* @param head
* @param n
* @return
*/
public ListNode removeNthFromEnd(ListNode head, int n){
if (head == null) {
return head;
}
if (head.next == null && n == 1) {
return null;
}
ListNode tempHead = new ListNode(-1);
tempHead.next = head;
ListNode fast = tempHead;
ListNode slow = tempHead;
while (n > 0 && fast != null) {
fast = fast.next;
n--;
}
while (fast.next != null) {
fast = fast.next;
slow = slow.next;
}
slow.next = slow.next.next;
return tempHead.next;
}
public static void main(String[] args) {
int[] ints = new int[]{1, 2, 3, 4, 5};
// int[] ints = new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
// int[] ints = new int[]{1};
ListNode listNode = ListNode.makeNode(ints);
ListNode.print(listNode);
N19 n19 = new N19();
ListNode listNode1 = n19.removeNthFromEnd(listNode, 5);
ListNode.print(listNode1);
}
}
结果
1,2,3,4,5,
2,3,4,5,
7 声望
3 粉丝
推荐阅读
Liquibase 数据库版本管理工具:3. changeSet 变更集详解
上篇文章中详细了介绍了一下changelog 文件的使用,本篇文章将详细说一下 changeSet 变更集 中的细节,以及通常的使用方式 1.变更集分类 changeSet 分为 6类: add create drop rename sql other 官方文档:[链接...
哒哒队长赞 1阅读 4k评论 1
大数据 + VR 全景技术重塑“二手车买车场景”
行内人都知道,二手车交易的核心问题在于车况信息不透明。中国二手车交易市场制度尚不完善,长期以来缺少行业公认的车辆估值标准和车况检测标准,二手车商提供的估值和车况信息不够透明。这导致用户和车商交易双...
之家技术赞 13阅读 12k
与RabbitMQ有关的一些知识
工作中用过一段时间的Kafka,不过主要还是RabbitMQ用的多一些。今天主要来讲讲与RabbitMQ相关的一些知识。一些基本概念,以及实际使用场景及一些注意事项。
lpe234赞 8阅读 1.8k
Git操作不规范,战友提刀来相见!
年终奖都没了,还要扣我绩效,门都没有,哈哈。这波骚Git操作我也是第一次用,担心闪了腰,所以不仅做了备份,也做了笔记,分享给大家。问题描述小A和我在同时开发一个功能模块,他在优化之前的代码逻辑,我在开...
王中阳Go赞 5阅读 2k评论 2
Redis 发布订阅模式:原理拆解并实现一个消息队列
“65 哥,如果你交了个漂亮小姐姐做女朋友,你会通过什么方式将这个消息广而告之给你的微信好友?““那不得拍点女朋友的美照 + 亲密照弄一个九宫格图文消息在朋友圈发布大肆宣传,暴击单身狗。”像这种 65 哥通过朋...
码哥字节赞 6阅读 1.3k
万字详解,吃透 MongoDB!
MongoDB 是一个基于 分布式文件存储 的开源 NoSQL 数据库系统,由 C++ 编写的。MongoDB 提供了 面向文档 的存储方式,操作起来比较简单和容易,支持“无模式”的数据建模,可以存储比较复杂的数据类型,是一款非常...
JavaGuide赞 3阅读 221
NB的Github项目,看到最后一个我惊呆了!
最近看到不少好玩的、实用的 Github 项目,就来给大家推荐一把。中国制霸生成器最近在朋友圈非常火的一个小网站,可以在线标记 居住、短居、游玩、出差、路过 标记后可生成图片进行社区分享,标记过的信息会记录...
艾小仙赞 5阅读 1.6k评论 1
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。