Bird
Raised Fist0
DSA Typescriptprogramming~5 mins

Find Middle Element of Linked List in DSA Typescript - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is the main idea behind finding the middle element of a linked list using two pointers?
Use two pointers: a slow pointer that moves one step at a time, and a fast pointer that moves two steps at a time. When the fast pointer reaches the end, the slow pointer will be at the middle.
Click to reveal answer
beginner
Why can't we find the middle element of a linked list by indexing like an array?
Linked lists do not support direct indexing because nodes are connected by pointers, not stored in contiguous memory. We must traverse nodes one by one.
Click to reveal answer
intermediate
What happens if the linked list has an even number of elements when finding the middle element?
The slow pointer will point to the first of the two middle elements if we stop when the fast pointer reaches the end or null.
Click to reveal answer
beginner
TypeScript code snippet: How do you define a simple linked list node class?
class ListNode {
  value: number;
  next: ListNode | null;
  constructor(value: number) {
    this.value = value;
    this.next = null;
  }
}
Click to reveal answer
beginner
What is the time complexity of finding the middle element of a linked list using the two-pointer method?
O(n), where n is the number of nodes in the linked list, because we traverse the list once.
Click to reveal answer
What does the fast pointer do in the two-pointer method to find the middle of a linked list?
AMoves three steps at a time
BMoves one step at a time
CStays at the head
DMoves two steps at a time
If the linked list has 5 nodes, where will the slow pointer be when the fast pointer reaches the end?
AAt the 3rd node
BAt the 5th node
CAt the 1st node
DAt the 4th node
What is the initial position of both slow and fast pointers when finding the middle element?
ASlow at second node, fast at head
BSlow at head, fast at second node
CBoth start at the head node
DBoth start at the tail node
What should you check to stop the traversal when using two pointers?
AFast pointer is null or fast.next is null
BSlow pointer is null
CSlow.next is null
DFast pointer equals slow pointer
What is the space complexity of the two-pointer method to find the middle element?
AO(n^2)
BO(1)
CO(log n)
DO(n)
Explain step-by-step how to find the middle element of a linked list using two pointers.
Think about how fast pointer moves twice as fast as slow pointer.
You got /5 concepts.
    Describe how the two-pointer method behaves differently for linked lists with odd and even lengths.
    Consider what happens when fast pointer cannot move two steps.
    You got /3 concepts.

      Practice

      (1/5)
      1. What is the main idea behind finding the middle element of a singly linked list using the two-pointer technique?
      easy
      A. Use two pointers, one moving twice as fast as the other; when the fast pointer reaches the end, the slow pointer is at the middle.
      B. Count all nodes first, then traverse again to the middle index.
      C. Reverse the linked list and pick the middle node from the reversed list.
      D. Use a stack to store all nodes and pop half of them to find the middle.

      Solution

      1. Step 1: Understand the two-pointer technique

        One pointer moves one step at a time (slow), the other moves two steps at a time (fast).
      2. Step 2: Identify the middle when fast pointer reaches the end

        When the fast pointer reaches the end of the list, the slow pointer will be at the middle node.
      3. Final Answer:

        Use two pointers, one moving twice as fast as the other; when the fast pointer reaches the end, the slow pointer is at the middle. -> Option A
      4. Quick Check:

        Two-pointer technique = slow at middle when fast ends [OK]
      Hint: Move one pointer twice as fast to find middle easily [OK]
      Common Mistakes:
      • Trying to count nodes first wastes extra time
      • Reversing list is unnecessary and inefficient
      • Using extra space like stack is not optimal
      2. Which of the following TypeScript code snippets correctly initializes a singly linked list node?
      easy
      A. class Node { value: number; next: any; constructor(value: number) { this.value = value; this.next = undefined; } }
      B. class Node { value: number; next: Node; constructor(value: number) { this.value = value; this.next = null; } }
      C. class Node { value: number; next: null; constructor(value: number) { this.value = value; this.next = null; } }
      D. class Node { value: number; next: Node | null; constructor(value: number) { this.value = value; this.next = null; } }

      Solution

      1. Step 1: Check the type of the next pointer

        It should be either another Node or null if it is the last node.
      2. Step 2: Verify constructor initialization

        The constructor sets value and initializes next to null correctly.
      3. Final Answer:

        class Node { value: number; next: Node | null; constructor(value: number) { this.value = value; this.next = null; } } -> Option D
      4. Quick Check:

        Next pointer type includes null and initialized to null [OK]
      Hint: Next pointer must allow null for list end [OK]
      Common Mistakes:
      • Not allowing next to be null causes type errors
      • Initializing next to undefined instead of null
      • Using any type loses type safety
      3. What will be the output of the following TypeScript code that finds the middle element of a linked list?
      class Node {
        value: number;
        next: Node | null;
        constructor(value: number) {
          this.value = value;
          this.next = null;
        }
      }
      
      function findMiddle(head: Node | null): number | null {
        let slow = head;
        let fast = head;
        while (fast !== null && fast.next !== null) {
          slow = slow!.next;
          fast = fast.next.next;
        }
        return slow ? slow.value : null;
      }
      
      // Create linked list: 10 -> 20 -> 30 -> 40 -> 50
      const head = new Node(10);
      head.next = new Node(20);
      head.next.next = new Node(30);
      head.next.next.next = new Node(40);
      head.next.next.next.next = new Node(50);
      
      console.log(findMiddle(head));
      medium
      A. 20
      B. 30
      C. 40
      D. 50

      Solution

      1. Step 1: Trace slow and fast pointers through the list

        Initially both at 10. After first loop: slow=20, fast=30; second loop: slow=30, fast=50; third loop ends as fast.next is null.
      2. Step 2: Identify slow pointer value at loop end

        Slow pointer is at node with value 30, which is the middle.
      3. Final Answer:

        30 -> Option B
      4. Quick Check:

        Slow pointer stops at middle node value 30 [OK]
      Hint: Fast pointer moves twice, slow pointer lands on middle [OK]
      Common Mistakes:
      • Returning fast pointer value instead of slow
      • Not checking fast.next in while condition
      • Off-by-one errors in pointer movement
      4. Identify the error in the following TypeScript function that attempts to find the middle element of a linked list:
      function findMiddle(head: Node | null): number | null {
        let slow = head;
        let fast = head;
        while (fast !== null && fast.next !== null) {
          slow = slow.next;
          fast = fast.next.next;
        }
        return slow.value;
      }
      medium
      A. The fast pointer should move one step at a time, not two.
      B. The while loop condition should be while (fast !== null) only.
      C. The function does not check if slow is null before accessing slow.value.
      D. The function should return fast.value instead of slow.value.

      Solution

      1. Step 1: Analyze pointer null safety before accessing value

        Slow pointer can be null if the list is empty, so accessing slow.value without check can cause runtime error.
      2. Step 2: Identify missing null check before return

        The function should check if slow is not null before returning slow.value to avoid errors.
      3. Final Answer:

        The function does not check if slow is null before accessing slow.value. -> Option C
      4. Quick Check:

        Always check pointer is not null before accessing properties [OK]
      Hint: Check for null before accessing node properties [OK]
      Common Mistakes:
      • Ignoring null checks causes runtime errors
      • Changing fast pointer movement breaks logic
      • Returning fast.value misses middle element
      5. Given a singly linked list with an even number of nodes, how can you modify the two-pointer approach to return the first middle element instead of the second middle element?
      hard
      A. Initialize fast pointer to head.next instead of head and then proceed normally.
      B. Move slow pointer two steps and fast pointer one step in each iteration.
      C. Use a stack to store nodes and pop half to get the second middle.
      D. Traverse the list twice: first to count nodes, second to middle+1 node.

      Solution

      1. Step 1: Understand difference between first and second middle in even-length list

        For even nodes, two middle nodes exist; the second middle is the one after the first middle.
      2. Step 2: Modify fast pointer start to head.next

        Starting fast pointer at head.next shifts slow pointer to first middle when fast reaches end.
      3. Final Answer:

        Initialize fast pointer to head.next instead of head and then proceed normally. -> Option A
      4. Quick Check:

        Fast starts at second node to get first middle [OK]
      Hint: Start fast pointer one step ahead for first middle [OK]
      Common Mistakes:
      • Swapping slow and fast pointer steps breaks logic
      • Using stack wastes extra space
      • Counting nodes twice is inefficient
      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