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

链表问题,需要注意一下是倒着数还是正着数,和头结点会不会被删除即可

直接删除法

    public ListNode removeNthFromEnd(ListNode head, int n) {
        if (head == null) {
            return null;
        }
        // 头结点会被删除吗?
        int length = 0;
        ListNode p = head;
        while (p != null) {
            p = p.next;
            length ++;
        }
        if (n == length) {
            return head.next;
        }
        int index = 1;
        p = head;
        // 让p停在 j - 1 位置上
        // 倒数变正数
        int j = length - n + 1;
        while (index < j - 1) {
            p = p.next;
            index++;
        }
        p.next = p.next.next;
        return head;
    }

双链表法

由于我们需要找到倒数第 n 个节点,因此我们可以使用两个指针 first 和 second 同时对链表进行遍历,并且 first 比 second 超前 n 个节点。
当 first 遍历到链表的末尾时,second 就恰好处于倒数第 n 个节点。

posted @ 2023-06-30 11:33  jrjewljs  阅读(4)  评论(0编辑  收藏  举报