📖 Scenario: Imagine you are managing a simple list of tasks to do. You want to add new tasks at the very start of your list so that the newest task is always done first.
🎯 Goal: You will build a simple linked list and learn how to insert a new node at the beginning (head) of the list.
📋 What You'll Learn
Create a Node class with an integer data and a next pointer
Create a LinkedList class with a head pointer
Write a method to insert a new node at the beginning of the list
Write a method to print the list from head to end
💡 Why This Matters
🌍 Real World
Linked lists are used in many applications like task scheduling, undo functionality in editors, and managing playlists where order and quick insertions matter.
💼 Career
Understanding linked lists and how to insert nodes at the beginning is a fundamental skill for software developers, especially for roles involving data structure optimization and system design.
Progress0 / 4 steps
1
Create Node and LinkedList classes
Create a class called Node with an integer variable data and a Node variable next. Then create a class called LinkedList with a Node variable head initialized to null.
DSA Java
Hint
Think of Node as a box holding a number and a pointer to the next box. The LinkedList keeps track of the first box with head.
2
Add insertAtBeginning method
Inside the LinkedList class, add a method called insertAtBeginning that takes an integer data as input. This method should create a new Node with the given data and insert it at the start of the list by updating head.
DSA Java
Hint
To insert at the beginning, point the new node's next to the current head, then update head to the new node.
3
Add printList method
Inside the LinkedList class, add a method called printList that prints all node data from head to the end, separated by arrows ->, ending with null.
DSA Java
Hint
Use a temporary pointer to walk through the list from head and print each node's data followed by an arrow.
4
Test insertion and print the list
In the main method, create a LinkedList object called list. Insert the integers 10, 20, and 30 at the beginning using insertAtBeginning. Then call printList to display the list.
DSA Java
Hint
Remember, inserting at the beginning means the last inserted number appears first when printing.
Practice
(1/5)
1. What does the "Insert at Beginning" operation do in a singly linked list?
easy
A. Deletes the last node of the list
B. Adds a new node at the end of the list
C. Adds a new node at the start of the list
D. Deletes the first node of the list
Solution
Step 1: Understand the operation
Inserting at the beginning means placing a new node before the current first node.
Step 2: Effect on the list
The new node becomes the head, pushing the old head to second position.
Final Answer:
Adds a new node at the start of the list -> Option C
Quick Check:
Insert at beginning = Add new head [OK]
Hint: New node becomes head, old head moves next [OK]
Common Mistakes:
Confusing insert at beginning with insert at end
Thinking it deletes nodes
Assuming it changes the tail node
2. Which of the following is the correct Java syntax to insert a new node at the beginning of a singly linked list named list with value 5?
easy
A. list.insertEnd(5);
B. list.add(5);
C. list.head.next = new Node(5);
D. list.head = new Node(5, list.head);
Solution
Step 1: Understand Node constructor
Assuming Node constructor takes value and next node, new Node(5, list.head) creates a new node pointing to current head.
Step 2: Assign new node as head
Setting list.head = new Node(5, list.head); inserts at beginning correctly.
Final Answer:
list.head = new Node(5, list.head); -> Option D
Quick Check:
New node points to old head, becomes new head [OK]
Hint: New node points to old head, assign new node as head [OK]
Common Mistakes:
Using add() which may add at end
Changing next of head instead of head itself
Using insertEnd() which adds at tail
3. What will be the output linked list after executing the following Java code?
class Node {
int data;
Node next;
Node(int d, Node n) { data = d; next = n; }
}
Node head = new Node(3, null);
head = new Node(2, head);
head = new Node(1, head);
// Print list
Node temp = head;
while(temp != null) {
System.out.print(temp.data + " -> ");
temp = temp.next;
}
System.out.print("null");
medium
A. 3 -> 2 -> 1 -> null
B. 1 -> 2 -> 3 -> null
C. null -> 1 -> 2 -> 3
D. 2 -> 1 -> 3 -> null
Solution
Step 1: Trace insertions
First node: 3 -> null Insert 2 at beginning: 2 -> 3 -> null Insert 1 at beginning: 1 -> 2 -> 3 -> null
Step 2: Print list
Loop prints nodes in order: 1, 2, 3, then null.
Final Answer:
1 -> 2 -> 3 -> null -> Option B
Quick Check:
Head insertions reverse order: 1,2,3 [OK]
Hint: Head insert reverses order of inserted nodes [OK]
Common Mistakes:
Assuming insertion adds at end
Printing nodes in wrong order
Confusing next pointers
4. Identify the error in the following code snippet that tries to insert a new node with value 10 at the beginning of a singly linked list.
class Node {
int data;
Node next;
Node(int d) { data = d; next = null; }
}
Node head = null;
Node newNode = new Node(10);
newNode.next = head.next;
head = newNode;
medium
A. Accessing head.next when head is null causes NullPointerException
B. New node is not assigned to head
C. Node constructor is missing next parameter
D. No error, code works fine
Solution
Step 1: Analyze head initialization
Head is null initially, so head.next access is invalid and causes error.
Step 2: Identify cause of error
Trying to assign newNode.next = head.next; throws NullPointerException because head is null.
Final Answer:
Accessing head.next when head is null causes NullPointerException -> Option A
Quick Check:
Null head means head.next invalid [OK]
Hint: Check if head is null before accessing head.next [OK]
Common Mistakes:
Ignoring null head before accessing next
Assuming constructor error
Thinking newNode not assigned to head
5. You have a singly linked list with nodes containing values [4, 5, 6] in that order. You want to insert a new node with value 3 at the beginning. After insertion, you want to print the list in the format shown below.
Which code snippet correctly performs the insertion and prints the list?
class Node {
int data;
Node next;
Node(int d) { data = d; next = null; }
}
Node head = new Node(4);
head.next = new Node(5);
head.next.next = new Node(6);
// Insert new node with value 3 at beginning and print list
// Fill in the blanks below
// Insert code here
// Print code here
hard
A. Node newNode = new Node(3);
newNode.next = head;
head = newNode;
Node temp = head;
while(temp != null) {
System.out.print(temp.data + " -> ");
temp = temp.next;
}
System.out.print("null");