【JAVA】力扣-19.删除链表的倒数第 N 个结点
2023-09-27 14:26:46 时间
一、问题
二、解题代码
public ListNode removeNthFromEnd(ListNode head, int n) {
ListNode dummy = new ListNode(-1);
dummy.next = head;
// 删除倒数第 n 个,要先找倒数第 n + 1 个节点,即要删除节点的前一个节点
ListNode preNode = findFromEnd(dummy, n + 1);
// 删掉倒数第 n 个节点
preNode.next = preNode.next.next;
return dummy.next;
}
/**
* 查找倒数第k个节点
*/
private ListNode findFromEnd(ListNode head, int k) {
ListNode slow = head;
ListNode fast = head;
// 快指针先走 k 步
for (int i = 0; i < k; i++) {
fast = fast.next;
}
// 快慢指针同时走 n - k 步
while (fast != null) {
slow = slow.next;
fast = fast.next;
}
// 慢指针现在指向第 n - k个节点,即倒数第 k 个节点
return slow;
}
相关文章
- 【Java算法题解】剑指 Offer II 022. 链表中环的入口节点
- 基于Java Socket的自定义协议,实现Android与服务器的长连接(二)
- Java 并发知识点总结归纳
- Java List 集合取 交集、并集、差集
- [三] java虚拟机 JVM字节码 指令集 bytecode 操作码 指令分类用法 助记符
- Java技术——你真的了解String类的intern()方法吗
- Java多态
- 强哥说Java--Java内部类(一)
- java实现双向链表的增删改查
- 【JAVA】力扣-876-链表的中间结点
- 【JAVA】力扣-23-合并K个升序链表
- Java finally语句到底是在return之前还是之后执行?
- Java并发编程的艺术(九)——批量获取多条线程的执行结果
- 1105 链表合并(JAVA)
- 1075 链表元素分类(JAVA)
- Java数据结构——代码实现双向链表的方法
- 6.JAVA-链表实例
- java excel大数据量导入导出与优化(修复excel单元格中有空值异常退出)
- 反转链表(不改变指针)JAVA版
- Java中的匿名对象