解题思路

参考幻灯片,点击后可以使用键盘上下键↕控制:

动图版:

实现代码


class Solution {
    public ListNode removeNthFromEnd(ListNode head, int n) {
        ListNode prev = head;
        int len = length(head);
        if (len - n == 0) return head.next;
        for (int i = 0; i < len - n - 1; i++) prev = prev.next;
        prev.next = prev.next.next;
        return head;
    }

    public int length(ListNode node) {
        int count = 0;
        while (node != null) {
            node = node.next;
            count++;
        }
        return count;
    }
}

复杂度分析


  • 时间复杂度:O(N)

    • 遍历了数组长度

  • 空间复杂度:O(1)

    • 没有消耗空间