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