diff --git a/work/1/Medium/Linked List/19.remove-nth-node-from-end-of-list.py b/work/1/Medium/Linked List/19.remove-nth-node-from-end-of-list.py new file mode 100644 index 0000000..50bcb7c --- /dev/null +++ b/work/1/Medium/Linked List/19.remove-nth-node-from-end-of-list.py @@ -0,0 +1,69 @@ +""" +19. Remove Nth Node From End of List +Difficulty: Medium +https://leetcode.com/problems/remove-nth-node-from-end-of-list/ + +────────────────────────────────────────────────── + +Given the head of a linked list, remove the n^th node from the end of +the list and return its head. + + + +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 + + + +Follow up: Could you do this in one pass? +""" + + +# 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