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

相关推荐
0+11114 分钟前
算法 --模拟
c++·算法·leetcode
青山是哪个青山21 分钟前
LeetCode 300:最长递增子序列
算法
hetao173383728 分钟前
2026-10-01~02 hetao1733837 的刷题记录
c++·算法
小虎牙^O^43 分钟前
模糊数学综合评价:从模糊数学到建模评价类模型
人工智能·算法
随意起个昵称1 小时前
【单调队列优化DP】U301134 绿色通道
算法·动态规划
Nil2081 小时前
leetcode 739每日温度
算法·leetcode·职场和发展
lvwangshu1 小时前
势能分析(摊还分析)
数据结构·数学·算法
盘古开天16662 小时前
PPO算法代码实战(三):PyTorch从零实现PPO求解CartPole
人工智能·pytorch·算法
yyy(十一月限定版)2 小时前
CF2138A Cake Assignment
算法
xqqxqxxq2 小时前
LeetCode Hot100 矩阵专题题解笔记
笔记·leetcode·矩阵