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

201 阅读2分钟

“Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。”

一、题目描述

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

二、思路分析

  • 利用快慢指针进行解题
    • 当快指针的下一个节点是Null的情况
    • 此时慢指针的下一个节点就是我们要删除的节点
    • 将慢指针的next指向慢指针的next.next节点即可

三、AC 代码:

class Solution {
    public ListNode removeNthFromEnd(ListNode head, int n) {
        //创建一个头节点
        ListNode pre = new ListNode(0);
        //头节点的下一个指向head
        pre.next = head;
        //定义快慢两个指针
        ListNode start = pre,end = pre;
        //边界条件,如果n不是零,才走
        while(n!=0){
            //快指针先走一步
            start = start.next;
            //快指针走n步
            n--;
        } 
        //边界条件,当快指针的下一个节点,为null的时候,慢指针的下一个节点就是要删除的节点
        while(start.next!=null){
            //如果不为空快指针向前走,同时慢指针也向前走
            start = start.next;
            end = end.next;
        }
        //此时,将慢指针的下一个节点指向下下个节点
        end.next = end.next.next;
        //返回头节点的下一个节点
        return pre.next;
    }
}

四、总结:

  • 好了,代码撸完,我们总结一下
    • 注意边界条件

    • 快指针先走n

    • 此时两指针之间就差了n,当我们的快指针下一个节点是null的时候,慢指针指向下下个节点,就成功删除了第n个元素

最后这个算法是Leetcode的第19题,是热题100的第10题,去年我刷了热题100用时一个月左右,接下来我会继续更新,小伙伴可以点赞关注,如果你也在刷热题100的话,希望可以对你有一些启发!