--- title: '19. Remove Nth Node From End of List' description: Given the head of a linked list, remove the n^th node from the end of the list and return its head icon: dot topics: - { name: "Linked List", slug: "linked-list" } - { name: "Two Pointers", slug: "two-pointers" } issue: "https://github.com/prdlk/leetcode/issues/80" sidebar: label: 'Remove Nth Node From End of List' badge: 'Medium' --- ::::warning Could you do this in one pass? :::: ### 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 <= sz <= 30` - `0 <= Node.val <= 100` - `1 <= n <= sz` ## Solution ```py # Definition for singly-linked list. # class ListNode: # def __init__(self, val=0, next=None): # self.val = val # self.next = next class Solution: def removeNthFromEnd(self, head: ListNode | None, n: int) -> ListNode | None: dummy = ListNode(0) dummy.next = head fast = dummy for _ in range(n): if fast.next is None: return head fast = fast.next slow = dummy while fast.next is not None: slow = slow.next fast = fast.next slow.next = slow.next.next return dummy.next ```