19. 删除链表的倒数第 N 个结点 [中等]

33 阅读1分钟

题目

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

解法一

思路

剑指 Offer 22. 链表中倒数第k个节点[简单] 差不多。只不过这个要记录下pre指针。

代码

    public ListNode removeNthFromEnd(ListNode head, int n) {
        ListNode dummyHead = new ListNode(0, head);
        ListNode pre = dummyHead;
        ListNode p = head, q = head;
        for (int i = 1; i < n; i++) {
            q = q.next;
        }
        
        while (q.next != null) {
            pre = p;
            p = p.next;
            q = q.next;
        }
        pre.next = p.next;
        return dummyHead.next;
    }

复杂度

  • 时间复杂度:O(n)
  • 空间复杂度:O(1)