删除链表的倒数第 N 个结点(Java)

(leetcode 19)

题目要求

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

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

思路

双指针,prev指向倒数第n个节点的前一个节点,tail指向扫描节点。

代码

 public ListNode removeNthFromEnd(ListNode head, int n) {
        ListNode newHead = new ListNode(-1, head);
        ListNode tail = newHead;
        ListNode prev = newHead;

        for(int i = 0; i < n; i ++) {
            tail = tail.next;
        }

        while(tail.next != null) {
            tail = tail.next;
            prev = prev.next;
        }

        prev.next = prev.next.next;

        return newHead.next;
    }

分析

时间复杂度:O(L)O(L),其中 L 是链表的长度。
空间复杂度:O(1)O(1)。

你可能感兴趣的:(java,开发语言,后端,leetcode,算法)