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

问题描述

LeetCode 19. 删除链表的倒数第 N 个结点 (opens in a new tab),难度中等

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

示例 1

输入:head = [1,2,3,4,5], n = 2
输出:[1,2,3,5]

示例 2

输入:head = [1], n = 1
输出:[]

示例 3

输入:head = [1,2], n = 1
输出:[1]

提示:

  • 链表中结点的数目为 sz
  • 1 <= sz <= 30
  • 0 <= Node.val <= 100
  • 1 <= n <= sz

进阶: 你能尝试使用一趟扫描实现吗?

题解

Solution.java
class Solution {
    public ListNode removeNthFromEnd(ListNode head, int n) {
        int len = 0;
        ListNode temp = head;
        while (temp != null) {
            len++;
            temp = temp.next;
        }
        ListNode prev = new ListNode(0, head);
        // 找到目标节点的前驱节点
        while (len - n > 0) {
            prev = prev.next;
            len--;
        }
        // 判断要删除的节点是否是 head 节点
        if (prev.next == head) {
            prev.next = prev.next.next;
            head = prev.next;
        } else {
            prev.next = prev.next.next;
        }
        return head;
    }
}