Delete the Middle Node — Fast/Slow with Prev Pointer

Sanjeev SharmaSanjeev Sharma
1 min read

Advertisement

Problem 238 · Delete the Middle Node of a Linked List

Difficulty: Medium · Pattern: Fast/Slow (track prev)

Delete node at index ⌊n/2⌋ (0-indexed).

Solutions

# Python
def deleteMiddle(head):
    if not head or not head.next: return None
    slow = head; fast = head.next.next; prev = None
    while fast and fast.next:
        prev = slow; slow = slow.next; fast = fast.next.next
    if prev is None:
        head.next = head.next.next if head.next else None
    else:
        prev.next = slow.next
        slow.next = None
    # Simpler: track prev
    dummy = ListNode(0, head)
    slow = dummy; fast = head
    while fast and fast.next:
        slow = slow.next; fast = fast.next.next
    slow.next = slow.next.next
    return dummy.next
// Java
public ListNode deleteMiddle(ListNode head) {
    if (head == null || head.next == null) return null;
    ListNode dummy = new ListNode(0, head), slow = dummy, fast = head;
    while (fast != null && fast.next != null) { slow = slow.next; fast = fast.next.next; }
    slow.next = slow.next.next;
    return dummy.next;
}

Complexity

  • Time: O(n)
  • Space: O(1)

Advertisement

Sanjeev Sharma

Written by

Sanjeev Sharma

Full Stack Engineer · E-mopro