LeetCode:19删除链表的倒数第N个节点

java 复制代码
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode removeNthFromEnd(ListNode head, int n) {
        ListNode dummy = new ListNode(0);
        dummy.next = head;

        ListNode fast = dummy;
        ListNode slow = dummy;
        
        //让快指针先走,和慢指针维持n+1的距离
        for(int i = 0; i <= n; i++){
            fast = fast.next;
        }
        //同步前进
        while(fast != null){
            fast = fast.next;
            slow = slow.next;
        }
        //删除节点
        slow.next = slow.next.next;

        return dummy.next;
    }
}

要求使用一趟扫描实现,所以不能不能先遍历一遍得到长度,然后再从头遍历删除指定节点。

所以使用快慢指针的方法,让慢指针先前进n+1步,然后再同步前进,等快指针指向null的时候,即可删除指定指针;同时使用哨兵节点,如果刚好删除的是头节点,慢指针没有所删除节点前一个位置,也就没法删除。

相关推荐
AIoT科技物语2 小时前
免费开源!50+算法,Java基于YOLO框架的视频AI识别算法平台,适配低空无人机巡检、摄像头安防场景
java·人工智能·算法·yolo·开源
ん贤2 小时前
Go GC垃圾回收机制
算法·go·gc·垃圾回收
y = xⁿ2 小时前
20天速通LeetCode day08:关于栈
算法·leetcode·职场和发展
Shadow(⊙o⊙)2 小时前
专题二滑动窗口
数据结构·算法
tankeven2 小时前
HJ181 相差不超过k的最多数
数据结构·c++·算法
XWalnut3 小时前
LeetCode刷题 day13
数据结构·算法·leetcode
炽烈小老头3 小时前
【每天学习一点算法 2026/04/17】多数元素
数据结构·学习·算法
云泽8083 小时前
第十五届蓝桥杯大赛软件赛省赛C/C++大学B组
c语言·c++·算法·蓝桥杯
大模型最新论文速读4 小时前
VQKV:KV Cache 压缩 82% 性能几乎不降
人工智能·深度学习·算法·机器学习·自然语言处理