跳转至

19.删除链表的倒数第 N 个结点 (Medium)*

题目描述*

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

示例*

给定一个链表: 1->2->3->4->5, 和 n = 2.

当删除了倒数第二个结点后,链表变为 1->2->3->5.

保证 n 是有效的。

进阶*

你能尝试使用一趟扫描吗?

代码*

快慢指针,先把快指针定位到 n 位置,然后用慢指针从头开始同时遍历,直到 fast 到尾部。

class Solution {
public:
    ListNode* removeNthFromEnd(ListNode* head, int n) {
        ListNode *fast = head;
        while(n--) {
            fast = fast->next;
        }
        if(fast == nullptr) {
            return head->next;
        }
        ListNode *slow = head;
        while(fast->next != nullptr) {
            slow = slow->next;
            fast = fast->next;
        }
        slow->next = slow->next->next;
        return head;
    }
};

执行用时:8ms

内存消耗:8.6MB


最后更新: July 23, 2022