A singly linked list is a chain of nodes where each node holds data and a link to the next node. It starts at a head node and ends when a node points to null.
Click to reveal answer
beginner
What does each node in a singly linked list contain?
Each node contains two parts: the data (value) and a pointer (reference) to the next node in the list.
Click to reveal answer
intermediate
How do you add a new node at the end of a singly linked list?
To add a node at the end, create the new node, then find the last node (which points to null), and update its next pointer to the new node.
Click to reveal answer
beginner
Why is a singly linked list different from an array?
A singly linked list stores elements in nodes linked by pointers, allowing easy insertion and deletion without shifting elements, unlike arrays which use contiguous memory.
Click to reveal answer
intermediate
What is the time complexity to access the nth element in a singly linked list?
Accessing the nth element takes O(n) time because you must start at the head and follow links one by one until you reach the nth node.
Click to reveal answer
What does the 'next' pointer in a singly linked list node point to?
AThe previous node in the list
BThe next node in the list
CThe head node
DThe last node in the list
✗ Incorrect
In a singly linked list, each node's 'next' pointer points to the next node in the sequence.
What value does the 'next' pointer of the last node hold?
AIt points to a random node
BIt points to itself
CIt points to the head node
DIt is null (or None)
✗ Incorrect
The last node's 'next' pointer is null to indicate the end of the list.
Which operation is faster in a singly linked list compared to an array?
AAccessing the 5th element
BAccessing the last element
CInserting a node at the beginning
DFinding the length
✗ Incorrect
Inserting at the beginning is fast in a singly linked list because it only requires changing the head pointer.
What is the first step to create a singly linked list from scratch?
ACreate a node class or structure
BCreate an array
CSort the data
DDelete all nodes
✗ Incorrect
Creating a node class or structure is the first step to define what each element in the list will hold.
How do you know if a singly linked list is empty?
AHead pointer is null
BTail pointer is null
CLength is zero
DAll nodes have null data
✗ Incorrect
If the head pointer is null, it means the list has no nodes and is empty.
Explain how to create a singly linked list from scratch in JavaScript.
Think about how each node links to the next and how the list keeps track of the start.
You got /4 concepts.
Describe the process to add a new node at the end of a singly linked list.
Remember the last node points to null before adding the new node.
You got /5 concepts.
Practice
(1/5)
1. What is the main purpose of a Singly Linked List in data structures?
easy
A. To store elements with random access by index
B. To store elements in a tree-like hierarchy
C. To store elements in a linear order where each element points to the next one
D. To store elements in a fixed-size array
Solution
Step 1: Understand the structure of a singly linked list
A singly linked list stores elements in nodes where each node points to the next node, forming a chain.
Step 2: Compare with other data structures
Unlike arrays or trees, singly linked lists do not support random access or hierarchical storage.
Final Answer:
To store elements in a linear order where each element points to the next one -> Option C
Quick Check:
Singly linked list = linear chain of nodes [OK]
Hint: Remember: singly linked list is a chain of nodes [OK]
Common Mistakes:
Confusing linked list with arrays
Thinking linked list supports random access
Mixing linked list with tree structures
2. Which of the following is the correct way to define a Node class for a singly linked list in JavaScript?
easy
A. class Node { constructor(value) { this.next = value; this.value = null; } }
B. class Node { constructor(value) { this.value = value; this.next = null; } }
C. class Node { constructor() { this.value = null; this.next = null; } }
D. class Node { constructor(value) { this.value = null; this.next = value; } }
Solution
Step 1: Identify the correct property assignments for a node
A node should store the given value and have a pointer to the next node, initially null.
Step 2: Check each option's constructor
class Node { constructor(value) { this.value = value; this.next = null; } } correctly assigns value and sets next to null. Others assign incorrectly or swap properties.
Final Answer:
class Node { constructor(value) { this.value = value; this.next = null; } } -> Option B
Quick Check:
Node stores value and next pointer [OK]
Hint: Node must store value and next=null initially [OK]
Common Mistakes:
Swapping value and next assignments
Not initializing next to null
Leaving value or next undefined
3. What will be the output after running this code?
class Node {
constructor(value) {
this.value = value;
this.next = null;
}
}
class LinkedList {
constructor() {
this.head = null;
}
add(value) {
const newNode = new Node(value);
if (!this.head) {
this.head = newNode;
} else {
let current = this.head;
while (current.next) {
current = current.next;
}
current.next = newNode;
}
}
print() {
let current = this.head;
let result = '';
while (current) {
result += current.value + ' -> ';
current = current.next;
}
result += 'null';
console.log(result);
}
}
const list = new LinkedList();
list.add(10);
list.add(20);
list.add(30);
list.print();
medium
A. 10 -> 20 -> 30 -> null
B. 30 -> 20 -> 10 -> null
C. 10 -> 20 -> null
D. null
Solution
Step 1: Trace the add method calls
Adding 10 sets head to node with value 10. Adding 20 and 30 appends nodes at the end.
Step 2: Trace the print method
Print traverses from head: 10, then 20, then 30, then null.
Final Answer:
10 -> 20 -> 30 -> null -> Option A
Quick Check:
Nodes added in order, printed in order [OK]
Hint: Add appends at end; print shows nodes in insertion order [OK]
Common Mistakes:
Assuming add inserts at head
Printing nodes in reverse order
Missing last node in print
4. Identify the error in this linked list add method and select the fix:
add(value) {
const newNode = new Node(value);
if (this.head === null) {
this.head = newNode;
} else {
let current = this.head;
while (current.next !== null) {
current = current.next;
}
current = newNode;
}
}
medium
A. Replace current = newNode; with current.next = newNode;
B. Replace this.head = newNode; with this.head.next = newNode;
C. Remove the while loop entirely
D. Change if (this.head === null) to if (!this.head.next)
Solution
Step 1: Understand the purpose of the while loop
The loop finds the last node where current.next is null.
Step 2: Identify the mistake in assignment
Assigning current = newNode; only changes the local variable, not the list. It should link the last node's next to newNode.
Final Answer:
Replace current = newNode; with current.next = newNode; -> Option A
Quick Check:
Link last node's next to new node [OK]
Hint: Assign newNode to current.next, not current [OK]
Common Mistakes:
Assigning newNode to current variable instead of current.next
Changing head incorrectly
Removing necessary traversal loop
5. You want to create a method remove(value) in your singly linked list that deletes the first node with the given value. Which approach correctly handles removing the head node and other nodes?
hard
A. Remove node by setting head = null if value matches, else do nothing
B. Always traverse from head and remove node by setting current = current.next without checking head separately
C. Traverse list and remove node by setting current.next = null when value matches
D. Check if head has the value, update head to head.next; else traverse and update previous.next to current.next when found
Solution
Step 1: Handle removal of head node
If the head node contains the value, update head to head.next to remove it.
Step 2: Traverse and remove non-head nodes
Traverse nodes keeping track of previous; when node with value found, set previous.next to current.next to unlink it.
Final Answer:
Check if head has the value, update head to head.next; else traverse and update previous.next to current.next when found -> Option D
Quick Check:
Remove head or unlink node by adjusting pointers [OK]
Hint: Handle head removal separately, then unlink nodes [OK]
Common Mistakes:
Not updating head when removing first node
Breaking links incorrectly causing list loss
Setting current.next = null removes too much
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.