# Remove Nth Node From End of List

<https://leetcode.com/problems/remove-nth-node-from-end-of-list/description/>

> Given a linked list, remove the nth node from the end of list and return its head.
>
> Example:
>
> Given linked list: 1->2->3->4->5, and n = 2.
>
> After removing the second node from the end, the linked list becomes 1->2->3->5.

## Thoughts

从后面数第n个，让一个指针先走n个（与第二个差n），然后两个再同时走到最后一个元素(不能到NULL), 此时第二个元素所在位置就是倒数第n-1个。

## Code

```
/*
 * @lc app=leetcode id=19 lang=cpp
 *
 * [19] Remove Nth Node From End of List
 *
 * https://leetcode.com/problems/remove-nth-node-from-end-of-list/description/
 *
 * algorithms
 * Medium (34.54%)
 * Likes:    2090
 * Dislikes: 158
 * Total Accepted:    441.2K
 * Total Submissions: 1.3M
 * Testcase Example:  '[1,2,3,4,5]\n2'
 *
 * Given a linked list, remove the n-th node from the end of list and return
 * its head.
 * 
 * Example:
 * 
 * 
 * Given linked list: 1->2->3->4->5, and n = 2.
 * 
 * After removing the second node from the end, the linked list becomes
 * 1->2->3->5.
 * 
 * 
 * Note:
 * 
 * Given n will always be valid.
 * 
 * Follow up:
 * 
 * Could you do this in one pass?
 * 
 */
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* removeNthFromEnd(ListNode* head, int n) {
        auto first = head, sec = head;
        for (int i = 0; i < n; ++i) first = first->next;
        if (first == nullptr) return head->next;
        while (first->next != nullptr) {
            first = first->next;
            sec = sec->next;
        }
        sec->next = sec->next->next;
        return head;
    }
};


```

## Analysis

TC: O(n)

只需要扫一遍。


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://hao-fu-1.gitbook.io/oj/linked_list/2-pointers-with-one-first-moved-n-steps/remove_nth_node_from_end_of_list.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
