Delete the Middle Node — Fast/Slow with Prev Pointer
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