📖 Scenario: You are building a simple stack using a linked list in Go. A stack is like a pile of plates where you add new plates on top. Each plate is a node in the linked list.
🎯 Goal: Create a linked list node structure and write code to push a new node onto the top of the stack.
📋 What You'll Learn
Define a Node struct with an integer value and a pointer to the next Node
Create a variable top to represent the top of the stack
Write a function push that takes a pointer to the current top and a new integer value, and returns the new top after adding the new node
Print the values in the stack from top to bottom after pushing a new node
💡 Why This Matters
🌍 Real World
Stacks are used in many programs like undo features, expression evaluation, and backtracking algorithms.
💼 Career
Understanding linked lists and stack operations is fundamental for software development and technical interviews.
Progress0 / 4 steps
1
Create the Node struct and initialize the stack top
Define a struct called Node with two fields: value int and next *Node. Then create a variable called top of type *Node and set it to nil.
DSA Go
Hint
Think of Node as a plate with a number and a pointer to the next plate below it.
2
Create a push function to add a new node
Write a function called push that takes two parameters: top *Node and val int. It should create a new Node with value set to val and next set to top. The function should return the new node as the new top.
DSA Go
Hint
Create a new node with the given value and point its next to the current top.
3
Push a new value onto the stack
In the main function, update the top variable by calling push(top, 10) to add a node with value 10 to the stack.
DSA Go
Hint
Call the push function and assign its result back to top.
4
Print the stack values from top to bottom
Write a for loop in main to print the value of each node starting from top until the end of the stack (where next is nil). Print each value on its own line.
DSA Go
Hint
Use a loop to move through each node and print its value.
Practice
(1/5)
1. What does the push operation do in a linked list when using a node?
easy
A. Deletes the entire linked list
B. Removes the last node from the list
C. Searches for a node with a specific value
D. Adds a new node at the beginning of the list
Solution
Step 1: Understand push operation in linked list
The push operation adds a new node at the start (head) of the linked list.
Step 2: Effect of push on list structure
The new node becomes the head, and its next pointer points to the previous head node.
Final Answer:
Adds a new node at the beginning of the list -> Option D
Quick Check:
Push = Add at head [OK]
Hint: Push always adds node at the start of the list [OK]
Common Mistakes:
Thinking push adds at the end
Confusing push with pop
Assuming push deletes nodes
2. Which of the following is the correct syntax to create a new node and push it onto a linked list in Go?
easy
A. newNode := Node{data: 5}; head.next = newNode
B. newNode := &Node{data: 5, next: head}; head = newNode
C. newNode := &Node{5}; head = newNode.next
D. newNode := Node{data: 5, next: nil}; head = newNode.next
Solution
Step 1: Create a new node with data and next pointer
In Go, use &Node{data: 5, next: head} to create a new node pointing to current head.
Step 2: Update head to new node
Assign head = newNode to make newNode the new head of the list.
Final Answer:
newNode := &Node{data: 5, next: head}; head = newNode -> Option B
Quick Check:
New node points to head, then head updated [OK]
Hint: New node's next points to head, then head updated [OK]
Common Mistakes:
Not using pointer (&) for new node
Assigning head.next instead of head
Setting next to nil instead of head
3. What will be the output linked list after executing this Go code?
type Node struct {
data int
next *Node
}
func main() {
var head *Node = nil
head = &Node{data: 1, next: head}
head = &Node{data: 2, next: head}
head = &Node{data: 3, next: head}
printList(head)
}
func printList(node *Node) {
for node != nil {
fmt.Print(node.data, " -> ")
node = node.next
}
fmt.Print("null")
}
medium
A. 3 -> 2 -> 1 -> null
B. 1 -> 2 -> 3 -> null
C. null
D. 1 -> null
Solution
Step 1: Trace node insertions
First node with data 1 is pushed, head points to node 1. Then node 2 is pushed, head points to node 2, next points to node 1. Then node 3 is pushed, head points to node 3, next points to node 2.
Step 2: Print list from head
Prints 3 -> 2 -> 1 -> null as nodes are added at front.
Final Answer:
3 -> 2 -> 1 -> null -> Option A
Quick Check:
Push adds at head, so list reversed [OK]
Hint: Push adds at head, so last pushed is first in list [OK]
Common Mistakes:
Assuming push adds at tail
Confusing order of nodes
Ignoring nil termination
4. Identify the error in this Go code that tries to push a new node onto a linked list:
type Node struct {
data int
next *Node
}
func push(head *Node, data int) {
newNode := &Node{data: data, next: head}
head = newNode
}
func main() {
var head *Node = nil
push(head, 10)
// printList(head) expected to show 10 -> null
}
medium
A. head is passed by value, so main's head is not updated
B. newNode is not created correctly with & operator
C. next pointer should be nil, not head
D. Function push should return void, not update head
Solution
Step 1: Analyze parameter passing
head is passed by value to push, so changes inside push do not affect main's head.
Step 2: Effect on linked list head
Assigning head = newNode inside push only changes local copy, main's head remains nil.
Final Answer:
head is passed by value, so main's head is not updated -> Option A
Quick Check:
Pointer must be passed by reference or returned [OK]
Hint: Pass head pointer by reference or return new head [OK]
Common Mistakes:
Assuming pointer changes reflect outside function
Not returning updated head
Misunderstanding Go parameter passing
5. Given a linked list with nodes containing integers, how would you modify the push function to avoid memory leaks and ensure the list is correctly updated in Go?
hard
A. Use a slice instead of linked list for better memory management
B. Use a global variable for head instead of passing it
C. Make push return the new head node and assign it to head in main
D. Set newNode.next to nil before assigning head
Solution
Step 1: Understand pointer update requirement
In Go, to update head outside push, function must return new head node.
Step 2: Assign returned head in main
Call head = push(head, data) to update head correctly and avoid dangling pointers.
Final Answer:
Make push return the new head node and assign it to head in main -> Option C
Quick Check:
Return new head to update list safely [OK]
Hint: Return new head from push and assign it outside [OK]
Common Mistakes:
Not returning updated head
Using global variables unnecessarily
Ignoring pointer semantics in Go
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.