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的时候,即可删除指定指针;同时使用哨兵节点,如果刚好删除的是头节点,慢指针没有所删除节点前一个位置,也就没法删除。

相关推荐
y1su1 分钟前
Leetcode 字符串模板
java·数据结构·算法·leetcode·职场和发展·动态规划
residual_fan31 分钟前
船用柴油机动态机动工况故障诊断:控制感知仿射网络(CAAN)的技术实现
人工智能·算法·数据挖掘·数据分析
其实防守也摸鱼1 小时前
Cylab在线靶场——CTF中的通用技能
linux·数据库·学习·算法·靶场·ctf·学习网络安全
蓝悦无人机1 小时前
《Planning algorithms》读书笔记——第8章 反馈运动规划
算法·读书笔记·反馈运动规划
RaaS1002 小时前
Agent Skills 进了 Linux Foundation:2.8 亿次安装,但装 skill 还没有安全规范
人工智能·算法·架构
CV爱数码2 小时前
CT 重建从零开始(五):ASTRA Toolbox 上手——几何、投影器与算法
图像处理·算法·计算机视觉·ct
TunerT_TQ2 小时前
超立方体Ramsey(openai/math 家族171)H11攻坚日志|D60–D69:Star分组重数、二幂坐标群、奇偶入射语义与Site‑Level候选计数形式化闭环
算法
Rabitebla2 小时前
【系统性学习笔记】Linux 权限篇(二):文件属性、权限修改与目录权限的底层逻辑
linux·c++·笔记·学习·算法
远离UE42 小时前
半拉格朗日学习笔记 动力学 实时渲染
人工智能·算法
小郎君6583 小时前
MPTT 不是万能编号:一棵百万节点树的增删改与批量事务
算法