Problem
Given the head
of a linked list, remove the \(n\)-th node from the end of the list and return its head.
Example 1
Input: head = [1,2,3,4,5], n = 2
Output: [1,2,3,5]
Example 2
Input: head = [1], n = 1
Output: []
Example 3
Input: head = [1,2], n = 1
Output: [1]
Constraints
- The number of nodes in the list is
sz
. - \(1 \le\)
sz
\(\le 30\) - \(0 \le\)
Node.val
\(\le 100\) - \(1 \le\)
n
\(\le\)sz
// Definition for singly-linked list.
struct ListNode {
int val;
ListNode *next;
ListNode() : val(0), next(nullptr) {}
ListNode(int x) : val(x), next(nullptr) {}
ListNode(int x, ListNode *next) : val(x), next(next) {}
};
Solution
ListNode* removeNthFromEnd(ListNode* head, int n) {
ListNode* dummy = new ListNode(0, head);
ListNode* fast = head;
ListNode* slow = head;
for (int i = 0; i < n; i++)
fast = fast->next;
while (fast->next != nullptr) {
slow = slow->next;
fast = fast->next;
}
slow->next = slow->next->next;
return dummy->next;
}
标签:Node,head,le,ListNode,int,fast,next,Nth,End
From: https://www.cnblogs.com/Not-Even-Wrong/p/17108166.html