Bird
Raised Fist0
DSA Typescriptprogramming~10 mins

Insert at Middle Specific Position in DSA Typescript - Execution Trace

Choose your learning style10 modes available
Concept Flow - Insert at Middle Specific Position
Start with head node
↓
Check if position is 0
|Yes↓
Insert at head
No↓
Traverse list to position-1
↓
Create new node
↓
Link new node to next
↓
Link previous node to new node
Start from the head, if position is zero insert at head. Otherwise, move to the node before the position, insert new node by adjusting links.
Execution Sample
DSA Typescript
class Node {
  constructor(public val: number, public next: Node | null = null) {}
}

function insertAtPosition(head: Node | null, val: number, pos: number): Node {
  if (pos === 0) {
    return new Node(val, head);
  }
  let current = head;
  let count = 0;
  while (current !== null && count < pos - 1) {
    current = current.next;
    count++;
  }
  if (current === null) {
    // Position is out of bounds, return head unchanged
    return head;
  }
  const newNode = new Node(val, current.next);
  current.next = newNode;
  return head;
}
Insert a new node with value val at position pos in the linked list starting at head.
Execution Table
StepCurrent Node ValuePosition CounterConditionActionList State
1Head (1)0pos=2? NoMove to next node1 -> 2 -> 3 -> null
2Node (2)1pos=2? NoMove to next node1 -> 2 -> 3 -> null
3Node (3)2pos=2? YesInsert new node after previous1 -> 2 -> 99 -> 3 -> null
4End--Return updated head1 -> 2 -> 99 -> 3 -> null
💡 Reached position 2, inserted new node, finished insertion.
Variable Tracker
VariableStartAfter Step 1After Step 2After Step 3Final
currentNode(1)Node(2)Node(3)Node(3)Node(3)
posCounter01222
headNode(1)Node(1)Node(1)Node(1)Node(1)
Key Moments - 2 Insights
Why do we stop traversal at position-1 and not at position?
Because we need to insert the new node after the node at position-1, so we stop traversal there to adjust links correctly (see execution_table step 3).
What happens if position is 0?
We insert the new node at the head by making it point to the current head and then update head to this new node (not shown in this trace but important to handle).
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, what is the value of posCounter at step 2?
A0
B2
C1
D3
💡 Hint
Check the 'Position Counter' column in execution_table row for step 2.
At which step is the new node inserted?
AStep 3
BStep 2
CStep 1
DStep 4
💡 Hint
Look at the 'Action' column describing insertion in execution_table.
If we change pos to 0, what would be the first action?
ATraverse to next node
BInsert at head
CInsert after node 1
DReturn null
💡 Hint
Refer to concept_flow where position 0 means insert at head.
Concept Snapshot
Insert at Middle Specific Position:
- If pos=0, insert new node at head.
- Else, traverse to node at pos-1.
- Create new node, link it to next node.
- Link previous node to new node.
- Return updated head.
Full Transcript
To insert a node at a specific middle position in a linked list, start from the head. If the position is zero, insert the new node at the head by pointing it to the current head and updating head. Otherwise, move through the list until you reach the node before the desired position. Then create the new node, link it to the next node, and update the previous node's next pointer to the new node. This process ensures the new node is correctly inserted at the specified position. The execution table shows step-by-step traversal and insertion, tracking the current node and position counter. Key moments include understanding why traversal stops at position-1 and handling insertion at position zero.

Practice

(1/5)
1. What does inserting at a specific middle position in a linked list mean?
easy
A. Adding a new node only at the beginning of the list
B. Removing a node from the middle of the list
C. Adding a new node only at the end of the list
D. Adding a new node exactly at the given position counting from the start

Solution

  1. Step 1: Understand insertion position

    Inserting at a specific middle position means placing the new node exactly at that position counting from the start of the list.
  2. Step 2: Differentiate from other insertions

    Insertion at beginning or end is different; here we insert inside the list at a given index.
  3. Final Answer:

    Adding a new node exactly at the given position counting from the start -> Option D
  4. Quick Check:

    Insert at position = Add node at that index [OK]
Hint: Insert means add node exactly at given index [OK]
Common Mistakes:
  • Confusing insertion with deletion
  • Thinking insertion only happens at start or end
  • Ignoring the position index
2. Which of the following TypeScript code snippets correctly inserts a node with value 10 at position 2 in a singly linked list?
easy
A. function insertAtPosition(head, val, pos) { let newNode = {value: val, next: null}; let current = head; for(let i=1; i
B. function insertAtPosition(head, val, pos) { let newNode = {value: val, next: null}; let current = head; for(let i=0; i
C. function insertAtPosition(head, val, pos) { let newNode = {value: val, next: null}; newNode.next = head; head = newNode; return head; }
D. function insertAtPosition(head, val, pos) { let newNode = {value: val, next: null}; head.next = newNode; return head; }

Solution

  1. Step 1: Analyze loop for position

    The loop runs from 1 to pos-2 to reach node before insertion point (pos-1).
  2. Step 2: Insert new node correctly

    New node's next points to current.next, then current.next updated to new node.
  3. Final Answer:

    Code in option A correctly inserts at position 2 -> Option A
  4. Quick Check:

    Loop to pos-1, link new node [OK]
Hint: Loop to node before position, then insert [OK]
Common Mistakes:
  • Looping too far or too short
  • Not updating newNode.next correctly
  • Inserting at wrong position index
3. What will be the linked list after inserting value 99 at position 3 in the list 1 -> 2 -> 3 -> 4 -> null using the following TypeScript code?
function insertAtPosition(head, val, pos) {
  let newNode = {value: val, next: null};
  if (pos === 1) {
    newNode.next = head;
    return newNode;
  }
  let current = head;
  for (let i = 1; i < pos - 1; i++) {
    current = current.next;
  }
  newNode.next = current.next;
  current.next = newNode;
  return head;
}

// Initial list: 1 -> 2 -> 3 -> 4 -> null
// Insert 99 at position 3
let head = {value:1, next:{value:2, next:{value:3, next:{value:4, next:null}}}};
head = insertAtPosition(head, 99, 3);
medium
A. 1 -> 2 -> 3 -> 4 -> 99 -> null
B. 1 -> 2 -> 99 -> 3 -> 4 -> null
C. 99 -> 1 -> 2 -> 3 -> 4 -> null
D. 1 -> 99 -> 2 -> 3 -> 4 -> null

Solution

  1. Step 1: Traverse to node before position 3

    Loop runs i=1 to pos-2=1, so current moves to node with value 2.
  2. Step 2: Insert new node after current

    New node 99 points to current.next (node 3), current.next updated to new node.
  3. Final Answer:

    1 -> 2 -> 99 -> 3 -> 4 -> null -> Option B
  4. Quick Check:

    Insert at pos 3 places 99 after 2 [OK]
Hint: Insert after node at pos-1 [OK]
Common Mistakes:
  • Inserting at wrong position
  • Not updating links correctly
  • Confusing position indexing
4. Identify the error in the following TypeScript function that tries to insert a node at position 2 in a linked list.
function insertAtPosition(head, val, pos) {
  let newNode = {value: val, next: null};
  let current = head;
  for(let i = 0; i < pos - 1; i++) {
    current = current.next;
  }
  newNode.next = current.next;
  current.next = newNode;
  return head;
}
medium
A. The loop runs one step too many, causing current to be null before insertion
B. The newNode.next is not assigned correctly
C. The function does not handle insertion at position 1
D. The function returns newNode instead of head

Solution

  1. Step 1: Analyze loop range

    The loop runs from i=0 to pos-2, moving current pos-1 times, which moves current too far.
  2. Step 2: Consequence of loop

    Current becomes the node at position pos, so current.next is undefined, causing error on insertion.
  3. Final Answer:

    The loop runs one step too many, causing current to be null before insertion -> Option A
  4. Quick Check:

    Loop overshoot breaks insertion [OK]
Hint: Loop to node before position, not at position [OK]
Common Mistakes:
  • Looping to position instead of position-1
  • Not checking for position 1 insertion
  • Incorrectly updating links
5. Given a singly linked list and a position that may be greater than the list length, how should you modify the insertAtPosition function to insert the new node at the end if the position is beyond the list length? Choose the correct approach.
hard
A. Insert the new node at the head regardless of position
B. Throw an error if position is greater than list length
C. Traverse until current.next is null or position reached, then insert new node at current.next
D. Ignore the insertion if position is invalid

Solution

  1. Step 1: Traverse safely

    Move current node forward until either position-1 steps or current.next is null (end of list).
  2. Step 2: Insert at end if position too large

    If position is beyond length, current.next will be null, so insert new node at end by setting current.next to new node.
  3. Final Answer:

    Traverse until current.next is null or position reached, then insert new node at current.next -> Option C
  4. Quick Check:

    Insert at end if position too large [OK]
Hint: Stop at end or position, then insert [OK]
Common Mistakes:
  • Not handling position beyond length
  • Throwing error unnecessarily
  • Inserting at wrong place when position invalid
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