feat(work): implement reorder list solution for problem 143

This commit is contained in:
Prad Nukala committed 2026-10-14 11:04:19 -04:00
1 parent 37a2d39269
commit 886024c4f0
1 file changed
+27 -8
+27 -8
View File
@@ -18,7 +18,7 @@ L0 → Ln → L1 → Ln - 1 → L2 → Ln - 2 →
You may not modify the values in the list's nodes. Only nodes You may not modify the values in the list's nodes. Only nodes
themselves may be changed. themselves may be changed.
Example 1: Example 1:
@@ -30,15 +30,16 @@ Example 2:
Input: head = [1,2,3,4,5] Input: head = [1,2,3,4,5]
Output: [1,5,2,4,3] Output: [1,5,2,4,3]
Constraints: Constraints:
• The number of nodes in the list is in the range [1, 5 * 10^4]. • The number of nodes in the list is in the range [1, 5 * 10^4].
• 1 <= Node.val <= 1000 • 1 <= Node.val <= 1000
""" """
# Definition for singly-linked list. # Definition for singly-linked list.
# class ListNode: # class ListNode:
# def __init__(self, val=0, next=None): # def __init__(self, val=0, next=None):
@@ -46,7 +47,25 @@ Constraints:
# self.next = next # self.next = next
class Solution: class Solution:
def reorderList(self, head: ListNode | None) -> None: def reorderList(self, head: ListNode | None) -> None:
""" # Find middle
Do not return anything, modify head in-place instead. slow, fast = head, head.next
""" while fast and fast.next:
slow = slow.next
fast = fast.next.next
# Reverse second half
second = slow.next
prev = slow.next = None
while second:
tmp = second.next
second.next = prev
prev = second
second = tmp
# merge two halfs
first, second = head, prev
while second:
tmp1, tmp2 = first.next, second.next
first.next = second
second.next = tmp1
first, second = tmp1, tmp2