Files
leetcode/apps/docs/content/(02-nodal-grid)/linked-list/19_remove-nth-node-from-end-of-list.mdx
T

65 lines
1.4 KiB
Plaintext

---
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
```