Search for a Value in Linked List in DSA Javascript - Time & Space Complexity
When searching for a value in a linked list, we want to know how the time it takes grows as the list gets longer.
We ask: How many steps does it take to find a value or decide it is not there?
Analyze the time complexity of the following code snippet.
function searchLinkedList(head, target) {
let current = head;
while (current !== null) {
if (current.value === target) {
return true;
}
current = current.next;
}
return false;
}
This code checks each node in the linked list one by one to find the target value.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Checking each node's value in the linked list.
- How many times: Up to once per node, until the target is found or list ends.
As the list grows, the number of checks grows roughly the same amount.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | Up to 10 checks |
| 100 | Up to 100 checks |
| 1000 | Up to 1000 checks |
Pattern observation: The steps increase directly with the number of nodes.
Time Complexity: O(n)
This means the time to search grows in direct proportion to the list size.
[X] Wrong: "Searching a linked list is always fast because you just follow the links."
[OK] Correct: You must check each node one by one, so it can take longer as the list grows.
Understanding this helps you explain how linked lists work and why searching them takes time proportional to their length.
"What if the linked list was sorted? How would that affect the time complexity of searching for a value?"
Practice
Solution
Step 1: Understand the search operation
Searching in a linked list means checking each node to see if it contains the target value.Step 2: Identify the goal of searching
The goal is to find whether the value exists anywhere in the list, not to modify the list.Final Answer:
To find if the value exists in the list -> Option AQuick Check:
Search means find value presence = C [OK]
- Confusing search with insertion or deletion
- Thinking search changes the list
- Assuming search reverses the list
head is the first node?Solution
Step 1: Understand the starting point of search
Search starts from the first node, so we assign the first node to a variable to traverse.Step 2: Choose the correct assignment
Assigningheadtocurrentlets us start from the first node and move forward.Final Answer:
let current = head; -> Option BQuick Check:
Start search at head node = B [OK]
- Starting at null means no nodes to check
- Skipping nodes by starting at head.next.next
- Assigning value instead of node reference
class Node {
constructor(value) {
this.value = value;
this.next = null;
}
}
const head = new Node(5);
head.next = new Node(10);
head.next.next = new Node(15);
function search(head, target) {
let current = head;
while (current !== null) {
if (current.value === target) {
return true;
}
current = current.next;
}
return false;
}
console.log(search(head, 10));
console.log(search(head, 20));Solution
Step 1: Trace search for value 10
Nodes are 5 -> 10 -> 15. The search finds 10 in the second node and returns true.Step 2: Trace search for value 20
20 is not in the list, so the loop ends and returns false.Final Answer:
true\nfalse -> Option CQuick Check:
10 found = true, 20 not found = false [OK]
- Returning false too early
- Not updating current to next node
- Confusing value with node reference
function search(head, target) {
let current = head;
while (current.next !== null) {
if (current.value === target) {
return true;
}
current = current.next;
}
return false;
}Solution
Step 1: Analyze the loop condition
The loop runs whilecurrent.next !== null, so it stops before the last node.Step 2: Check if last node is checked
The last node's value is never checked because loop ends early, so search may miss target at last node.Final Answer:
It does not check the last node's value -> Option AQuick Check:
Loop misses last node check = D [OK]
- Using current.next !== null instead of current !== null
- Forgetting to check last node
- Assuming loop covers all nodes
Solution
Step 1: Add a position counter starting at 1
Initialize a variable to track the current node's position as you traverse the list.Step 2: Traverse and compare values
For each node, check if its value matches the target. If yes, return the current position.Step 3: Return -1 if not found
If traversal ends without finding the target, return -1 to indicate absence.Final Answer:
Initialize a position counter at 1; traverse nodes; return position if value matches; else -1 -> Option DQuick Check:
Position tracking with traversal = A [OK]
- Returning boolean instead of position
- Not updating position counter
- Reversing list unnecessarily
Ready to prove it?
Pass the test and this pattern moves unknown
