📖 Scenario: Imagine you have a line of people waiting to enter a movie theater. The first person in line leaves, so the line moves forward. This is like removing the first node from a linked list.
🎯 Goal: You will create a singly linked list with three nodes, then remove the first node (the beginning node), and finally print the list to see the updated order.
📋 What You'll Learn
Create a singly linked list with nodes containing values 10, 20, and 30 in that order.
Write a function to delete the first node of the linked list.
Print the linked list after deletion to show the updated list.
💡 Why This Matters
🌍 Real World
Linked lists are used in many applications like music playlists, undo functionality in apps, and managing tasks where items are added or removed dynamically.
💼 Career
Understanding linked list operations like deleting nodes is fundamental for software developers working with data structures, memory management, and system programming.
Progress0 / 4 steps
1
Create a singly linked list with three nodes
Create a struct called Node with an int data and a Node* next. Then create three nodes with values 10, 20, and 30 linked in that order. Finally, create a Node* called head pointing to the first node.
DSA C++
Hint
Start by defining the Node struct. Then create three nodes with the given values and link them by setting the next pointers.
2
Create a function to delete the first node
Create a function called deleteAtBeginning that takes a reference to Node*& head. Inside, check if head is not nullptr. If not, store head in a temporary pointer, move head to the next node, and delete the old first node.
DSA C++
Hint
Remember to pass head by reference so you can change it inside the function. Delete the old first node after moving head.
3
Call the delete function to remove the first node
In main, call the function deleteAtBeginning(head) to remove the first node from the linked list.
DSA C++
Hint
Simply call deleteAtBeginning(head); inside main to remove the first node.
4
Print the linked list after deletion
Write a while loop in main to print the linked list starting from head. Print each node's data followed by ->. After the loop, print nullptr to show the end of the list.
DSA C++
Hint
Use a pointer to walk through the list from head. Print each data followed by ->. End with nullptr.
Practice
(1/5)
1. What happens when you delete the first node of a singly linked list?
easy
A. The head pointer moves to the second node, and the first node is removed.
B. The last node is deleted instead of the first.
C. The list becomes empty regardless of its size.
D. The second node is deleted, but the head remains the same.
Solution
Step 1: Understand the head pointer role
The head pointer points to the first node in the list.
Step 2: Delete the first node by moving head
To delete the first node, update head to point to the second node, removing the first node from the list.
Final Answer:
The head pointer moves to the second node, and the first node is removed. -> Option A
Quick Check:
Deleting first node means head moves forward [OK]
Hint: Deleting first node means head points to next node [OK]
Common Mistakes:
Deleting the wrong node (not the first)
Not updating the head pointer
Assuming list becomes empty always
Confusing first and second nodes
2. Which of the following is the correct syntax to delete the first node in a singly linked list in C++?
easy
A. head->next = head; delete head;
B. head = head->next; delete head;
C. delete head; head = head->next;
D. Node* temp = head; head = head->next; delete temp;
Solution
Step 1: Store the current head node
We save the current head in a temporary pointer to delete it safely later.
Step 2: Move head to next node and delete old head
Update head to point to the next node, then delete the old head using the temporary pointer.
Final Answer:
Node* temp = head; head = head->next; delete temp; -> Option D
Quick Check:
Save old head, move head, delete old head [OK]
Hint: Save old head before deleting to avoid losing access [OK]
Common Mistakes:
Deleting head before moving pointer
Not saving old head before deleting
Assigning head incorrectly
Deleting head twice
3. What will be the output linked list after executing the following code?
struct Node {
int data;
Node* next;
};
Node* head = new Node{10, new Node{20, new Node{30, nullptr}}};
Node* temp = head;
head = head->next;
delete temp;
Node* curr = head;
while(curr != nullptr) {
std::cout << curr->data << " -> ";
curr = curr->next;
}
std::cout << "null";
medium
A. 20 -> 30 -> null
B. null
C. 30 -> null
D. 10 -> 20 -> 30 -> null
Solution
Step 1: Initial linked list setup
The list starts as 10 -> 20 -> 30 -> null.
Step 2: Delete first node and update head
We save head (10) in temp, move head to 20, then delete node 10.
Step 3: Print remaining list
Starting from new head (20), we print 20 -> 30 -> null.
Final Answer:
20 -> 30 -> null -> Option A
Quick Check:
First node deleted, list starts at 20 [OK]
Hint: After deleting head, list starts from next node [OK]
Common Mistakes:
Printing deleted node data
Not updating head pointer
Deleting wrong node
Forgetting to print null at end
4. Identify the error in the following code snippet that deletes the first node of a linked list:
B. Deleting temp before moving head causes runtime error.
C. The function does not update the original head pointer outside the function.
D. No error; code works correctly.
Solution
Step 1: Understand pointer passing in C++
Function receives head by value, so changes inside do not affect original head.
Step 2: Identify missing update to original head
Updating local head pointer does not update the caller's head, so list head remains unchanged.
Final Answer:
The function does not update the original head pointer outside the function. -> Option C
Quick Check:
Pointer passed by value, original head unchanged [OK]
Hint: Pass head by reference to update original pointer [OK]
Common Mistakes:
Assuming head changes outside function
Deleting node before moving head
Confusing pointer and value passing
Ignoring nullptr checks
5. Given a singly linked list, write the correct approach to delete the first node safely and update the head pointer in C++. Which of the following code snippets correctly achieves this?
hard
A. void deleteFirstNode(Node* head) {
Node* temp = head;
head = head->next;
delete temp;
}
B. void deleteFirstNode(Node*& head) {
if (head == nullptr) return;
Node* temp = head;
head = head->next;
delete temp;
}