Bird
Raised Fist0
DSA Pythonprogramming~20 mins

Reorder Linked List in DSA Python - Practice Problems & Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Reorder Linked List Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output of Reordering a Linked List
What is the printed state of the linked list after running the reorder function on the list 1 -> 2 -> 3 -> 4 -> 5 -> null?
DSA Python
class Node:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next

def print_list(head):
    result = []
    while head:
        result.append(str(head.val))
        head = head.next
    print(' -> '.join(result) + ' -> null')

def reorder_list(head):
    if not head or not head.next:
        return
    # Find middle
    slow, fast = head, head
    while fast and fast.next:
        slow = slow.next
        fast = fast.next.next
    # Reverse second half
    prev, curr = None, slow.next
    slow.next = None
    while curr:
        nxt = curr.next
        curr.next = prev
        prev = curr
        curr = nxt
    # Merge two halves
    first, second = head, prev
    while second:
        tmp1, tmp2 = first.next, second.next
        first.next = second
        second.next = tmp1
        first, second = tmp1, tmp2

head = Node(1, Node(2, Node(3, Node(4, Node(5)))))
reorder_list(head)
print_list(head)
A1 -> 2 -> 3 -> 4 -> 5 -> null
B1 -> 5 -> 2 -> 4 -> 3 -> null
C5 -> 4 -> 3 -> 2 -> 1 -> null
D1 -> 3 -> 5 -> 2 -> 4 -> null
Attempts:
2 left
💡 Hint
Think about splitting the list, reversing the second half, then merging.
🧠 Conceptual
intermediate
1:00remaining
Understanding the Purpose of Reordering
What is the main goal of the 'Reorder Linked List' algorithm?
ATo rearrange the list so that nodes alternate from the start and end towards the center.
BTo sort the linked list in ascending order.
CTo remove duplicate nodes from the linked list.
DTo reverse the entire linked list.
Attempts:
2 left
💡 Hint
Think about how the first and last nodes are placed after reordering.
🔧 Debug
advanced
2:00remaining
Identify the Error in Reordering Code
What error will this code produce when trying to reorder the list 1 -> 2 -> 3 -> 4 -> null? class Node: def __init__(self, val=0, next=None): self.val = val self.next = next def reorder_list(head): slow, fast = head, head while fast.next and fast.next.next: slow = slow.next fast = fast.next.next prev, curr = None, slow.next slow.next = None while curr: nxt = curr.next curr.next = prev prev = curr curr = nxt first, second = head, prev while second: tmp1 = first.next tmp2 = second.next first.next = second second.next = tmp1 first = tmp1 second = tmp2 head = Node(1, Node(2, Node(3, Node(4)))) reorder_list(head)
AAttributeError because 'NoneType' object has no attribute 'next'
BNo error, code runs correctly
CTypeError due to wrong variable assignment
DInfinite loop causing program to hang
Attempts:
2 left
💡 Hint
Check the while loop condition for finding the middle.
📝 Syntax
advanced
1:30remaining
Correct the Syntax Error in Reorder Function
Which option fixes the syntax error in this code snippet? reorder_list = lambda head: ( slow, fast = head, head while fast and fast.next: slow = slow.next fast = fast.next.next )
AAdd parentheses around the while loop inside lambda
BRemove the while loop and use a for loop instead
CReplace lambda with def and add colon after function name
DAdd a return statement inside the lambda
Attempts:
2 left
💡 Hint
Lambda functions cannot contain statements like loops.
🚀 Application
expert
1:00remaining
Number of Nodes After Reordering
Given a linked list with 7 nodes, after applying the reorder list algorithm, how many nodes will be in the final list?
A5 nodes
B6 nodes
C8 nodes
D7 nodes
Attempts:
2 left
💡 Hint
Reordering changes order but not the number of nodes.

Practice

(1/5)
1. What is the main goal of the Reorder Linked List problem?
easy
A. Remove duplicate nodes from the linked list
B. Sort the linked list in ascending order
C. Reverse the entire linked list
D. Rearrange the list so nodes alternate from start and end towards the center

Solution

  1. Step 1: Understand the problem statement

    The problem asks to reorder the list so that nodes come alternately from the start and end, like L0 -> Ln -> L1 -> Ln-1 -> L2 -> Ln-2 ...
  2. Step 2: Differentiate from other operations

    This is not sorting or reversing the entire list, but a specific pattern of rearrangement.
  3. Final Answer:

    Rearrange the list so nodes alternate from start and end towards the center -> Option D
  4. Quick Check:

    Reorder means alternate start/end nodes = A [OK]
Hint: Remember: reorder means alternate front and back nodes [OK]
Common Mistakes:
  • Confusing reorder with sorting
  • Thinking reorder means full reversal
  • Assuming duplicates are removed
2. Which of the following Python code snippets correctly splits a linked list into two halves for reordering?
easy
A. slow, fast = head, head.next while fast and fast.next: slow = slow.next fast = fast.next.next second = slow.next slow.next = null
B. slow, fast = head, head while fast and fast.next: slow = slow.next fast = fast.next.next second = slow.next slow.next = null
C. slow, fast = head.next, head while fast and fast.next: slow = slow.next fast = fast.next.next second = slow.next slow.next = null
D. slow, fast = head, head while fast.next and fast.next.next: slow = slow.next fast = fast.next.next second = slow.next slow.next = null

Solution

  1. Step 1: Understand slow and fast pointer technique

    Using slow and fast pointers starting at head, fast moves twice as fast to find middle.
  2. Step 2: Check code correctness

    slow, fast = head, head while fast and fast.next: slow = slow.next fast = fast.next.next second = slow.next slow.next = null correctly initializes both at head and uses while fast and fast.next to move pointers safely.
  3. Final Answer:

    Option B code snippet correctly splits the list into two halves -> Option B
  4. Quick Check:

    Slow and fast start at head, fast moves twice = B [OK]
Hint: Start slow and fast at head; fast moves twice as fast [OK]
Common Mistakes:
  • Starting fast at head.next causes off-by-one errors
  • Incorrect while loop conditions causing crashes
  • Not breaking the list by setting slow.next = null
3. What is the output linked list after reordering the list 1 -> 2 -> 3 -> 4 -> 5 -> null?
medium
A. 1 -> 5 -> 2 -> 4 -> 3 -> null
B. 5 -> 4 -> 3 -> 2 -> 1 -> null
C. 1 -> 2 -> 3 -> 4 -> 5 -> null
D. 1 -> 3 -> 5 -> 2 -> 4 -> null

Solution

  1. Step 1: Identify the reorder pattern

    Reorder means first node, last node, second node, second last node, and so on.
  2. Step 2: Apply pattern to given list

    For 1->2->3->4->5, reordered is 1->5->2->4->3.
  3. Final Answer:

    1 -> 5 -> 2 -> 4 -> 3 -> null -> Option A
  4. Quick Check:

    Alternate front and back nodes = C [OK]
Hint: Pick nodes alternately from front and back [OK]
Common Mistakes:
  • Reversing entire list instead of reordering
  • Keeping original order unchanged
  • Skipping nodes or mixing order
4. Given the following code snippet for reordering a linked list, what is the bug?
def reorderList(head):
    if not head or not head.next:
        return
    slow, fast = head, head
    while fast and fast.next:
        slow = slow.next
        fast = fast.next.next
    second = slow.next
    slow.next = null
    prev = null
    while second:
        temp = second.next
        second.next = prev
        prev = second
        second = temp
    first, second = head, prev
    while second:
        temp1 = first.next
        temp2 = second.next
        first.next = second
        second.next = temp1
        first = temp1
        second = temp2
medium
A. The function does not return the head after reordering
B. The slow pointer should start at head.next to find middle correctly
C. The while loop merging two halves should check first and second, not just second
D. The code does not handle the case when the list has only one node

Solution

  1. Step 1: Analyze function return behavior

    The function modifies the list in place but does not return anything, which is acceptable if list nodes are modified directly.
  2. Step 2: Check if returning head is necessary

    Since the list is modified in place, returning head is optional; however, if used in some contexts, returning head is safer.
  3. Step 3: Identify actual bug

    All other parts correctly find middle, reverse second half, and merge. The main issue is no return statement if function expected to return head.
  4. Final Answer:

    The function does not return the head after reordering -> Option A
  5. Quick Check:

    Missing return statement = A [OK]
Hint: Check if function returns the modified list head [OK]
Common Mistakes:
  • Starting slow pointer at head.next causing wrong middle
  • Merging loop condition incorrect causing infinite loop
  • Ignoring single node edge case
5. You have a linked list 1 -> 2 -> 3 -> 4 -> 5 -> 6 -> null. After applying the reorder linked list algorithm, what will be the final list? Also, explain why the middle node is chosen as it is.
hard
A. 1 -> 6 -> 2 -> 5 -> 3 -> 4 -> null; middle chosen to split list evenly
B. 1 -> 2 -> 3 -> 4 -> 5 -> 6 -> null; no reordering done for even length
C. 1 -> 6 -> 2 -> 5 -> 3 -> 4 -> null; middle chosen as the first of the two middle nodes
D. 1 -> 5 -> 2 -> 4 -> 3 -> 6 -> null; middle chosen as the last node

Solution

  1. Step 1: Apply reorder pattern to even length list

    For 1->2->3->4->5->6, reordered list is 1->6->2->5->3->4.
  2. Step 2: Explain middle node choice

    Using slow and fast pointers, slow stops at the first middle node (3), splitting list into two halves evenly.
  3. Final Answer:

    1 -> 6 -> 2 -> 5 -> 3 -> 4 -> null; middle chosen as the first of the two middle nodes -> Option C
  4. Quick Check:

    Even length split uses first middle node = D [OK]
Hint: For even length, slow stops at first middle node [OK]
Common Mistakes:
  • Choosing second middle node as split point
  • Not reordering even length lists
  • Mixing node order in final list
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard