**Remove Nth Node From End of List**

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->null, and n = 2.

After removing the second node from the end, the linked list becomes 1->2->3->5->null.

**Note**

The minimum number of nodes in list is n.

**Challenge**

O(n) time

Solution: One Pass using Fast Slow Pointers

O(n) time, O(1) space

ListNode removeNthFromEnd(ListNode head, int n) { if (head == null) { return null; } ListNode slow = head; ListNode fast = slow; for (int i = 0; i < n; i++) { if (fast.next == null) { return head.next; } fast = fast.next; } while (fast.next != null) { fast = fast.next; slow = slow.next; } slow.next = slow.next.next; return head; }