Skip to content

Files

Latest commit

81f346e · Dec 10, 2024

History

History

0143-Reorder List

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
Dec 10, 2024
Dec 10, 2024
Dec 10, 2024

143. Reorder List

You are given the head of a singly linked-list. The list can be represented as:

L0 → L1 → … → Ln - 1 → Ln

Reorder the list to be on the following form:

L0 → Ln → L1 → Ln - 1 → L2 → Ln - 2 → …

You may not modify the values in the list's nodes. Only nodes themselves may be changed.

Example 1:

Input: head = [1,2,3,4]
Output: [1,4,2,3]

Example 2:

Input: head = [1,2,3,4,5]
Output: [1,5,2,4,3]

Constraints:

  • The number of nodes in the list is in the range [1, 5 * 104].
  • 1 <= Node.val <= 1000

Solutions (Python)

1. Solution

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def reorderList(self, head: Optional[ListNode]) -> None:
        """
        Do not return anything, modify head in-place instead.
        """
        length = 0
        curr = head
        while curr is not None:
            length += 1
            curr = curr.next

        prev = None
        curr = head
        for _ in range((length + 1) // 2):
            prev = curr
            curr = curr.next

        prev.next = None
        prev = None
        for _ in range(length // 2):
            temp = curr
            curr = curr.next
            temp.next = prev
            prev = temp

        curr0 = head
        curr1 = prev
        for _ in range(length // 2):
            prev0 = curr0
            prev1 = curr1
            curr0 = curr0.next
            curr1 = curr1.next
            prev0.next = prev1
            prev1.next = curr0