mirror of
https://github.com/prdlk/leetcode.git
synced 2026-11-04 05:37:38 +00:00
feat(work): add LeetCode solutions for problems 380, 82, 92
This commit is contained in:
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
|
||||
Reference in new issue
Block a user