mirror of
https://github.com/prdlk/leetcode.git
synced 2026-11-02 13:12:44 +00:00
71 lines
1.7 KiB
Plaintext
71 lines
1.7 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"
|
|
companies:
|
|
- { name: "Google", period: "Thirty Days", frequency: 29 }
|
|
- { name: "Amazon", period: "Three Months", frequency: 51.1 }
|
|
- { name: "Bloomberg", period: "Three Months", frequency: 46.8 }
|
|
- { name: "Meta", period: "Three Months", frequency: 43.3 }
|
|
- { name: "Microsoft", period: "Six Months", frequency: 24.1 }
|
|
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
|
|
```
|