快慢指针 动画演示 快慢指针 #19 删除链表的倒数第N个节点 - 删除链表的倒数第 N 个结点 - 力扣(LeetCode) (leetcode-cn.com)
【leetcode|算法之快慢指针】思想:定义快慢指针,快指针在慢指针之前,也可以叫前后指针,用于删除某个节点,保持不失联
public ListNode removeNthFromEnd(ListNode head, int n) {
ListNode dummyHead = new ListNode(0);
dummyHead.next = head;
// 慢指针初始指向虚拟头结点
ListNode slow = dummyHead;
// 快指针初始指向虚拟头结点
ListNode fast = dummyHead;
// 快指针先向前移动n+1步!!!
for(int i = 0;
i <= n;
i++) {
fast = fast.next;
}// 快慢指针同时向前移动,直到快指针指向null
while (fast!=null){
fast = fast.next;
slow = slow.next;
}// 慢指针的下一个节点即待删除节点
ListNode delNode = slow.next;
// 慢指针的后继指针指向待删除节点的下一个节点
// 这样就将待删除节点删除了
slow.next = delNode.next;
delNode.next = null;
return dummyHead.next;
}
推荐阅读
- leetcode|快慢指针之练习【2】
- [LeetCode] 42. Trapping Rain Water
- 神经网络|基于语音的疲劳度检测算法研究
- 算法|2021/2022届-Matlab数字图像处理—选题推荐
- 图文并茂!推荐算法架构——粗排
- 算法|深度优先和广度优先算法
- 202. Happy Number(LeetCode)
- leetcode-202-Happy Number
- LeetCode|98. 验证二叉搜索树