# 19. Remove Nth Node From End of List

## Problem

{% embed url="<https://leetcode.com/problems/remove-nth-node-from-end-of-list/description/>" %}

## Intuition

<figure><img src="https://1388126071-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MVQ7Ie-PZpN_8yApX0-%2Fuploads%2FSs1AA7lPJg0FicvPtvMX%2Fimage.png?alt=media&#x26;token=d196040e-4009-48ee-9d5a-58d668fc0cab" alt=""><figcaption></figcaption></figure>

<figure><img src="https://1388126071-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MVQ7Ie-PZpN_8yApX0-%2Fuploads%2Fo1G4wkOIazbgv1x7QC98%2Fimage.png?alt=media&#x26;token=77f643ff-72bb-4b28-8f60-2484f645a92b" alt=""><figcaption></figcaption></figure>

<figure><img src="https://1388126071-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MVQ7Ie-PZpN_8yApX0-%2Fuploads%2FzKQeHhhnR2rVlG1ssnLh%2Fimage.png?alt=media&#x26;token=e4816f73-5413-4eca-a28e-726cda355e95" alt=""><figcaption></figcaption></figure>

<figure><img src="https://1388126071-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MVQ7Ie-PZpN_8yApX0-%2Fuploads%2FwKBAfTyeJmWTTPO0NWPm%2Fimage.png?alt=media&#x26;token=6a072e74-88a8-4cb1-b3b0-f7f99bde7d48" alt=""><figcaption></figcaption></figure>

<figure><img src="https://1388126071-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MVQ7Ie-PZpN_8yApX0-%2Fuploads%2FId9Q4QCSpQDTCkxjPrnS%2Fimage.png?alt=media&#x26;token=a110edb8-d940-4e75-b59d-b27931e21c6c" alt=""><figcaption></figcaption></figure>

## Time Complexity

## Space Complexity

## Solution

```java
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode removeNthFromEnd(ListNode head, int n) {
        // Time Complexity: O(n), n -> number of nodes in linked list
        // Space complexity: O(1), Auxillary space complexity

        // Adding sentinel node. Adding this helps in moving the
        // nodes using 0-index correctly

        // Create a dummy node
        ListNode dummy = new ListNode();
        dummy.next = head; // Link head to dummy.next

        // Create two pointers setting to dummy
        ListNode slow = dummy;
        ListNode fast = dummy;

        // Move fast pointer by "n" steps forward
        for(int i=0;i<=n;i++) {
            fast = fast.next;
        }

        // Traverse fast and slow pointers till end of fast ptr
        while(fast!=null) {
            slow = slow.next;
            fast = fast.next;
        }

        // Rearranging the nodes
        slow.next = slow.next.next;

        // As head is set to dummy.next, return dummy.next
        // Where the head ListNode is manipulated
        return dummy.next;
    }
}
```
