📖 Scenario: You are managing a simple waiting line at a coffee shop. Customers join the line one by one at the end. You want to keep track of the order in which customers arrive using a linked list.
🎯 Goal: Build a singly linked list and add new customers at the end of the list (tail insert). Finally, print the list to see the order of customers waiting.
📋 What You'll Learn
Create a singly linked list node class called Node with an integer data and a next pointer.
Create a linked list class called LinkedList with a head pointer.
Add a method InsertAtEnd(int data) to add a new node at the end of the list.
Add a method PrintList() to print the list nodes in order separated by ' -> ' and ending with 'null'.
💡 Why This Matters
🌍 Real World
Linked lists are used in real-world applications like managing waiting lines, undo functionality in apps, and dynamic memory allocation.
💼 Career
Understanding linked lists and how to insert nodes at the end is a fundamental skill for software developers, especially in roles involving data structures and system design.
Progress0 / 4 steps
1
Create Node and LinkedList classes
Create a class called Node with an integer field data and a Node field next. Then create a class called LinkedList with a Node field head initialized to null.
DSA C#
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 InsertAtEnd method
Inside the LinkedList class, add a method called InsertAtEnd that takes an integer data. This method should create a new Node with data and add it at the end of the linked list. If the list is empty (head is null), set head to the new node. Otherwise, traverse the list to find the last node and set its next to the new node.
DSA C#
Hint
Remember to check if the list is empty first. If not, move through the list until you find the last node (where next is null), then link the new node there.
3
Add PrintList method
Inside the LinkedList class, add a method called PrintList that prints all node data values in order separated by ' -> ' and ends with 'null'. Use a variable current to traverse from head until null.
DSA C#
Hint
Use a loop to visit each node starting from head. Print the data followed by ' -> '. After the loop, print 'null' to show the list end.
4
Insert nodes and print the list
In the Main method, create a LinkedList object called list. Use InsertAtEnd to add nodes with data 10, 20, and 30 in that order. Then call PrintList() on list to display the linked list.
DSA C#
Hint
Create the linked list object, add the three numbers at the end, then print the list to see the order.
Practice
(1/5)
1. What does the InsertAtEnd method do in a singly linked list?
easy
A. Adds a new node at the end (tail) of the list
B. Removes the first node of the list
C. Inserts a new node at the beginning (head) of the list
D. Deletes the last node of the list
Solution
Step 1: Understand the method name
The method name InsertAtEnd suggests adding a node at the end of the list.
Step 2: Recall linked list operations
Inserting at the end means adding a new node after the current last node (tail).
Final Answer:
Adds a new node at the end (tail) of the list -> Option A
Quick Check:
InsertAtEnd = Add node at tail [OK]
Hint: InsertAtEnd means add node at tail, not head or remove [OK]
Common Mistakes:
Confusing insert at end with insert at beginning
Thinking it removes nodes instead of adding
Mixing up tail and head operations
2. Which of the following is the correct syntax to create a new node and insert it at the end of a singly linked list in C#?
easy
A. Node newNode = new Node(data); tail.next = newNode; tail = newNode;
B. Node newNode = new Node(data); newNode.next = head;
C. Node newNode = new Node(data); newNode.prev = tail; tail = newNode;
D. Node newNode = new Node(data); head = newNode;
Solution
Step 1: Create a new node with data
We create a new node using new Node(data).
Step 2: Link new node at the end
To insert at end, set tail.next = newNode and update tail = newNode.
Final Answer:
Node newNode = new Node(data); tail.next = newNode; tail = newNode; -> Option A
Hint: Tail insert needs tail.next and tail update [OK]
Common Mistakes:
Assigning newNode.next to head instead of tail.next
Forgetting to update tail pointer
Using prev pointer in singly linked list
3. What will be the output linked list after executing the following code?
LinkedList list = new LinkedList();
list.InsertAtEnd(10);
list.InsertAtEnd(20);
list.InsertAtEnd(30);
list.PrintList();
Assuming PrintList() prints nodes as value -> value -> ... -> null.
medium
A. 30 -> 20 -> 10 -> null
B. 10 -> 20 -> 30 -> null
C. 10 -> 20 -> null
D. null
Solution
Step 1: Insert nodes at end in order
Nodes 10, 20, 30 are inserted at the tail one by one, so list order is 10, then 20, then 30.
Step 2: Print list in order
Printing shows nodes in insertion order ending with null.
Final Answer:
10 -> 20 -> 30 -> null -> Option B
Quick Check:
InsertAtEnd preserves order: 10,20,30 [OK]
Hint: InsertAtEnd keeps order; print shows same sequence [OK]
Common Mistakes:
Assuming insert at end reverses order
Missing last node in print
Confusing head and tail positions
4. The following code tries to insert a node at the end of a singly linked list but causes a runtime error. What is the error?
public void InsertAtEnd(int data) {
Node newNode = new Node(data);
if (head == null) {
head = newNode;
} else {
Node temp = head;
while (temp.next != null) {
temp = temp.next;
}
temp = newNode;
}
}
medium
A. Node constructor is missing
B. The head is not updated when list is empty
C. The while loop condition is incorrect
D. The line temp = newNode; does not link the new node to the list
Solution
Step 1: Analyze the while loop
The loop finds the last node where temp.next == null.
Step 2: Check how new node is linked
Assigning temp = newNode; only changes local variable, not the last node's next pointer.
Step 3: Correct linking
Should assign temp.next = newNode; to link new node at end.
Final Answer:
The line temp = newNode; does not link the new node to the list -> Option D
Quick Check:
Must set temp.next = newNode, not temp = newNode [OK]
Hint: Assign newNode to temp.next, not temp variable [OK]
Common Mistakes:
Assigning newNode to temp instead of temp.next
Not updating head when list empty
Incorrect loop condition causing infinite loop
5. You have a singly linked list with nodes: 5 -> 15 -> 25 -> null. You want to insert a new node with value 35 at the end. After insertion, what will be the correct sequence of nodes? Also, what changes must be made if the list is empty initially?
hard
A. Sequence: 5 -> 15 -> 25 -> null; No changes needed for empty list
B. Sequence: 35 -> 5 -> 15 -> 25 -> null; If empty, set tail = newNode only
C. Sequence: 5 -> 15 -> 25 -> 35 -> null; If empty, set head = newNode and tail = newNode
D. Sequence: 5 -> 15 -> 25 -> 35 -> null; If empty, set tail.next = newNode only
Solution
Step 1: Insert new node at end
Adding 35 at end appends it after 25, so list becomes 5 -> 15 -> 25 -> 35 -> null.
Step 2: Handle empty list case
If list is empty, both head and tail must point to the new node to start the list properly.
Final Answer:
Sequence: 5 -> 15 -> 25 -> 35 -> null; If empty, set head = newNode and tail = newNode -> Option C
Quick Check:
Insert at end appends; empty list needs head and tail set [OK]
Hint: Empty list: set head and tail to new node; else tail.next = newNode [OK]
Common Mistakes:
Not updating both head and tail when list is empty
Inserting new node at head instead of tail
Only updating tail without linking new node
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.