feat(work): add LeetCode solutions for problems 380, 82, 92

This commit is contained in:
Prad Nukala committed 2026-10-13 16:51:41 -04:00
1 parent f1a952f2bd
commit 0a4b8d8b49
3 files changed
+229

No files matched your search

@@ -0,0 +1,60 @@
"""
82. Remove Duplicates from Sorted List II
Difficulty: Medium
https://leetcode.com/problems/remove-duplicates-from-sorted-list-ii/
──────────────────────────────────────────────────
You are given the head of a sorted linked list.
Delete all nodes that have duplicate numbers, leaving only distinct
numbers from the original list.
Return the linked list sorted as well.
Example 1:
Input: head = [1,2,3,3,4,4,5]
Output: [1,2,5]
Example 2:
Input: head = [1,1,1,2,3]
Output: [2,3]
Constraints:
• The number of nodes in the list is in the range [0, 300].
• -100 <= Node.val <= 100
• The list is guaranteed to be sorted in ascending order.
"""
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def deleteDuplicates(self, head: ListNode | None) -> ListNode | None:
sentinel = ListNode(0, head)
pred = sentinel
while head:
if head.next and head.val == head.next.val:
while head.next and head.val == head.next.val:
head = head.next
pred.next = head.next
else:
pred = pred.next
head = head.next
return sentinel.next
@@ -0,0 +1,71 @@
"""
92. Reverse Linked List II
Difficulty: Medium
https://leetcode.com/problems/reverse-linked-list-ii/
──────────────────────────────────────────────────
Given the head of a singly linked list and two integers left and
right where left <= right, reverse the nodes of the list from position
left to position right, and return the reversed list.
Example 1:
Input: head = [1,2,3,4,5], left = 2, right = 4
Output: [1,4,3,2,5]
Example 2:
Input: head = [5], left = 1, right = 1
Output: [5]
Constraints:
• The number of nodes in the list is n.
• 1 <= n <= 500
• -500 <= Node.val <= 500
• 1 <= left <= right <= n
Follow up: Could you do it 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 reverseBetween(
self, head: ListNode | None, left: int, right: int
) -> ListNode | None:
cur, prev = head, None
while left > 1:
prev = cur
cur = cur.next
left, right = left - 1, right - 1
tail, con = cur, prev
while right:
third = cur.next
cur.next = prev
prev = cur
cur = third
right -= 1
if con:
con.next = prev
else:
head = prev
tail.next = cur
return head