Bird
Raised Fist0
DSA Goprogramming~20 mins

Insert at Middle Specific Position in DSA Go - Practice Problems & Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Master of Insert at Middle Specific Position
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output after inserting a node at position 3 in a singly linked list
What is the printed linked list after inserting a node with value 99 at position 3 in the list 10 -> 20 -> 30 -> 40 -> null?
DSA Go
package main
import "fmt"
type Node struct {
    value int
    next  *Node
}
func insertAtPosition(head *Node, val int, pos int) *Node {
    newNode := &Node{value: val}
    if pos == 1 {
        newNode.next = head
        return newNode
    }
    current := head
    for i := 1; i < pos-1 && current != nil; i++ {
        current = current.next
    }
    if current == nil {
        return head
    }
    newNode.next = current.next
    current.next = newNode
    return head
}
func printList(head *Node) {
    for head != nil {
        fmt.Printf("%d -> ", head.value)
        head = head.next
    }
    fmt.Println("null")
}
func main() {
    head := &Node{10, &Node{20, &Node{30, &Node{40, nil}}}}
    head = insertAtPosition(head, 99, 3)
    printList(head)
}
A99 -> 10 -> 20 -> 30 -> 40 -> null
B10 -> 99 -> 20 -> 30 -> 40 -> null
C10 -> 20 -> 99 -> 30 -> 40 -> null
D10 -> 20 -> 30 -> 40 -> 99 -> null
Attempts:
2 left
💡 Hint
Remember that position 3 means the new node should be after the second node.
❓ Predict Output
intermediate
2:00remaining
Result of inserting at position beyond list length
What is the printed linked list after trying to insert a node with value 50 at position 10 in the list 1 -> 2 -> 3 -> null?
DSA Go
package main
import "fmt"
type Node struct {
    value int
    next  *Node
}
func insertAtPosition(head *Node, val int, pos int) *Node {
    newNode := &Node{value: val}
    if pos == 1 {
        newNode.next = head
        return newNode
    }
    current := head
    for i := 1; i < pos-1 && current != nil; i++ {
        current = current.next
    }
    if current == nil {
        return head
    }
    newNode.next = current.next
    current.next = newNode
    return head
}
func printList(head *Node) {
    for head != nil {
        fmt.Printf("%d -> ", head.value)
        head = head.next
    }
    fmt.Println("null")
}
func main() {
    head := &Node{1, &Node{2, &Node{3, nil}}}
    head = insertAtPosition(head, 50, 10)
    printList(head)
}
A1 -> 50 -> 2 -> 3 -> null
B1 -> 2 -> 3 -> 50 -> null
C50 -> 1 -> 2 -> 3 -> null
D1 -> 2 -> 3 -> null
Attempts:
2 left
💡 Hint
If the position is beyond the list length, the list remains unchanged.
🔧 Debug
advanced
2:00remaining
Identify the runtime error in insertAtPosition function
What runtime error will occur when running this code if the position is 1 and the list is empty (head is nil)?
DSA Go
package main
import "fmt"
type Node struct {
    value int
    next  *Node
}
func insertAtPosition(head *Node, val int, pos int) *Node {
    newNode := &Node{value: val}
    if pos == 1 {
        newNode.next = head
        return newNode
    }
    current := head
    for i := 1; i < pos-1 && current != nil; i++ {
        current = current.next
    }
    newNode.next = current.next
    current.next = newNode
    return head
}
func main() {
    var head *Node = nil
    head = insertAtPosition(head, 5, 1)
    fmt.Println(head.value)
}
ANo error, prints 5
Bpanic: runtime error: invalid memory address or nil pointer dereference
Cpanic: index out of range
Dcompilation error: cannot assign to current.next
Attempts:
2 left
💡 Hint
Check the condition for position 1 and empty list.
❓ Predict Output
advanced
2:00remaining
Output after inserting at position 1 in a non-empty list
What is the printed linked list after inserting a node with value 7 at position 1 in the list 4 -> 5 -> 6 -> null?
DSA Go
package main
import "fmt"
type Node struct {
    value int
    next  *Node
}
func insertAtPosition(head *Node, val int, pos int) *Node {
    newNode := &Node{value: val}
    if pos == 1 {
        newNode.next = head
        return newNode
    }
    current := head
    for i := 1; i < pos-1 && current != nil; i++ {
        current = current.next
    }
    if current == nil {
        return head
    }
    newNode.next = current.next
    current.next = newNode
    return head
}
func printList(head *Node) {
    for head != nil {
        fmt.Printf("%d -> ", head.value)
        head = head.next
    }
    fmt.Println("null")
}
func main() {
    head := &Node{4, &Node{5, &Node{6, nil}}}
    head = insertAtPosition(head, 7, 1)
    printList(head)
}
A7 -> 4 -> 5 -> 6 -> null
B4 -> 5 -> 6 -> 7 -> null
C4 -> 7 -> 5 -> 6 -> null
D7 -> 5 -> 6 -> null
Attempts:
2 left
💡 Hint
Inserting at position 1 means the new node becomes the new head.
🧠 Conceptual
expert
2:00remaining
Number of nodes after multiple insertions at middle positions
Starting with an empty singly linked list, you insert nodes with values 1, 2, 3, 4 in this order at positions 1, 2, 2, and 3 respectively. How many nodes does the list have after all insertions?
A3
B4
C5
D2
Attempts:
2 left
💡 Hint
Track the list length after each insertion carefully.

Practice

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

Solution

  1. Step 1: Understand linked list positions

    Positions in a linked list start from 1 at the head and increase by 1 for each node.
  2. Step 2: Define middle insertion

    Inserting at a middle position means placing a new node between two existing nodes at that position.
  3. Final Answer:

    Adding a new node exactly between two existing nodes at a given position -> Option C
  4. Quick Check:

    Middle insertion = Insert between nodes [OK]
Hint: Middle insertion means placing node between two nodes [OK]
Common Mistakes:
  • Confusing insertion with deletion
  • Thinking insertion only happens at start or end
  • Ignoring position indexing starting at 1
2. Which Go code snippet correctly inserts a new node at position 3 in a singly linked list?
easy
A. temp := head for i := 1; i < 2; i++ { temp = temp.next } newNode.next = temp.next temp.next = newNode
B. temp := head for i := 0; i < 3; i++ { temp = temp.next } newNode.next = temp.next temp.next = newNode
C. temp := head for i := 1; i <= 3; i++ { temp = temp.next } newNode.next = temp.next temp.next = newNode
D. temp := head for i := 1; i < 3; i++ { temp = temp.next } newNode.next = temp.next temp.next = newNode

Solution

  1. Step 1: Loop to node before position 3

    To insert at position 3, loop until position 2 (i < 2) to get node before insertion point.
  2. Step 2: Adjust pointers correctly

    Set newNode.next to temp.next, then temp.next to newNode to insert newNode at position 3.
  3. Final Answer:

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

    Loop to position-1, then insert [OK]
Hint: Loop to position-1 node before inserting [OK]
Common Mistakes:
  • Looping too many times and skipping nodes
  • Setting pointers in wrong order causing lost nodes
  • Using wrong loop conditions (<= instead of <)
3. What will be the linked list after inserting value 99 at position 2 in the list 10 -> 20 -> 30 -> null using this Go code?
type Node struct {
  val  int
  next *Node
}

head := &Node{10, &Node{20, &Node{30, nil}}}
newNode := &Node{99, nil}
temp := head
for i := 1; i < 1; i++ {
  temp = temp.next
}
newNode.next = temp.next
temp.next = newNode
medium
A. 10 -> 99 -> 20 -> 30 -> null
B. 99 -> 10 -> 20 -> 30 -> null
C. 10 -> 20 -> 99 -> 30 -> null
D. 10 -> 20 -> 30 -> 99 -> null

Solution

  1. Step 1: Loop runs zero times to position 1 node

    The loop condition i < 1 means no iteration; temp stays at head (value 10).
  2. Step 2: Insert newNode after temp

    newNode.next points to temp.next (node with 20), then temp.next points to newNode, inserting 99 after 10.
  3. Final Answer:

    10 -> 99 -> 20 -> 30 -> null -> Option A
  4. Quick Check:

    Insert after position 1 = position 2 [OK]
Hint: Loop to node before position, then insert new node [OK]
Common Mistakes:
  • Misunderstanding loop range causing wrong insertion
  • Confusing head node position as 0 instead of 1
  • Incorrect pointer assignments losing nodes
4. Identify the error in this Go code that tries to insert a node at position 4 in a linked list of length 3:
temp := head
for i := 1; i <= 4; i++ {
  temp = temp.next
}
newNode.next = temp.next
temp.next = newNode
medium
A. New node is not created before insertion
B. Pointers are assigned in wrong order causing lost nodes
C. Position 4 is invalid for a list of length 3
D. Loop runs too many times causing temp to be nil and panic

Solution

  1. Step 1: Analyze loop iterations

    The loop runs from i=1 to i=4 inclusive, moving temp 4 times forward.
  2. Step 2: Check list length and temp value

    List length is 3, so after 3 moves temp becomes nil; moving one more causes panic on temp.next.
  3. Final Answer:

    Loop runs too many times causing temp to be nil and panic -> Option D
  4. Quick Check:

    Loop beyond list length = nil pointer error [OK]
Hint: Loop only to position-1 within list length [OK]
Common Mistakes:
  • Looping beyond list length causing runtime errors
  • Not checking for nil before accessing next
  • Confusing <= with < in loop condition
5. Given a singly linked list and a position k, write a Go function to insert a new node with value v at position k. If k is greater than the list length + 1, insert at the end. What will be the list after inserting 50 at position 5 in 10 -> 20 -> 30 -> 40 -> null?
hard
A. 10 -> 20 -> 50 -> 30 -> 40 -> null
B. 10 -> 20 -> 30 -> 40 -> 50 -> null
C. 50 -> 10 -> 20 -> 30 -> 40 -> null
D. 10 -> 20 -> 30 -> 50 -> 40 -> null

Solution

  1. Step 1: Check position against list length

    List length is 4; position 5 is length+1, so insert at end.
  2. Step 2: Insert new node at end

    Traverse to last node (40), set its next to new node with value 50, new node next is nil.
  3. Final Answer:

    10 -> 20 -> 30 -> 40 -> 50 -> null -> Option B
  4. Quick Check:

    Position > length = insert at end [OK]
Hint: If position too big, insert at list end [OK]
Common Mistakes:
  • Trying to insert beyond list length without appending
  • Misplacing new node in middle instead of end
  • Not handling nil next pointer at list end
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