设置虚拟头结点,快慢指针,快指针先走n步,接着快慢指针一起走,快指针走到链表尾时,慢指针跳过下一个节点即可。
class Solution {
public:
ListNode* removeNthFromEnd(ListNode* head, int n) {
if (head == nullptr) return nullptr;
ListNode* dummy = new ListNode(0, head);
ListNode* fast = dummy, *slow = dummy;
while (n -- && fast) fast = fast->next;
while (fast->next) fast = fast->next, slow = slow->next;
slow->next = slow->next->next;
return dummy->next;
}
};