Linked List

Phase

-
Current operation

Slow Ptr

-
Finds middle

Fast Ptr

-
Moves 2x speed

Depth

0
Recursion level
Click "Step" or "Play" to start sorting the linked list
Unsorted
Finding Mid
Split Point
Comparing
Selected
Sorted
▼ slow - moves 1 step
▼ fast - moves 2 steps
Python Code - Merge Sort (Linked List)
def sortList(head):
    if not head or not head.next:
        return head
    mid = getMid(head)
    left = head
    right = mid.next
    mid.next = None # Split the list
    left_sorted = sortList(left)
    right_sorted = sortList(right)
    return merge(left_sorted, right_sorted)
 
def getMid(head): # Slow/Fast pointers
    slow, fast = head, head.next
    while fast and fast.next:
        slow = slow.next
        fast = fast.next.next
    return slow
 
def merge(l1, l2): # Merge two sorted lists
    dummy = ListNode()
    tail = dummy
    while l1 and l2:
        if l1.val < l2.val:
            tail.next = l1; l1 = l1.next
        else:
            tail.next = l2; l2 = l2.next
        tail = tail.next
    tail.next = l1 or l2
    return dummy.next