美文网首页
LeetCode 第19题:删除链表的倒数第 N 个结点

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

作者: 放开那个BUG | 来源:发表于2021-05-15 12:05 被阅读0次

1、前言

题目描述

2、思路

这道题一般人都能想到双指针解法,一个 start 一个 end,end 先走 n 步,然后 start、end 一起走,直到 end 走到链表的末尾。

但是需要注意的是,删除的节点有可能就是第一个节点,此时需要特殊处理一下,直接将头节点删除,第二个节点作为首节点返回即可。删除头节点的条件是,end 一下就走到 null 了。

3、代码

class Solution {
    public ListNode removeNthFromEnd(ListNode head, int n) {
        if(head == null){
            return null;
        }

        ListNode start = head;
        ListNode end = head;
        while(n > 0){
            end = end.next;
            n--;
        }

        // 说明直接去掉第一个
        if(end == null){
            start = head;
            head = head.next;
            start = null;
            return head;
        }

        // 说明去掉的不是第一个
        while(end.next != null){
            start = start.next;
            end = end.next;
        }

        ListNode removeNode = start.next;
        start.next = removeNode.next;
        removeNode.next = null;

        return head;
    }
}

相关文章

网友评论

      本文标题:LeetCode 第19题:删除链表的倒数第 N 个结点

      本文链接:https://www.haomeiwen.com/subject/qcqudltx.html