Leetcode19. 删除链表的倒数第 N 个结点

发布时间 2023-10-18 08:23:27作者: 白布鸽

题目描述

给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。

示例

image

提交的代码

class Solution {
    //快慢指针
    public ListNode removeNthFromEnd(ListNode head, int n) {
        ListNode fakeHead=new ListNode(-1,head);
        ListNode slow=fakeHead;
        ListNode fast=fakeHead;

        //先让快指针移动n次
        while(n-->0)fast=fast.next;

        //fast移动到链的尾部,slow也移动到了要删除的节点的前驱
        while(fast.next!=null){
            fast=fast.next;
            slow=slow.next;
        }

        slow.next=slow.next.next;
        return fakeHead.next;
    }
}

使用的方法就是快慢指针,先让fast指针移动n次,之后fast和slow一起移动,当fast到达最后一个节点的时候,slow也就到了需要删除节点的前驱了。
老样子,使用虚头方便删除。

学习到的东西

我在看题目描述的时候,看到底下有进阶的描述:仅一趟遍历就完成删除,当时想到的也是快慢指针的方法,但是一想本质上不也是两次扫描吗,就没写,看了别人的解答才发现都是用的这个方法,仔细一想确实是一趟- -。下次一定要忍住不看解答!