Bird
Raised Fist0
DSA Pythonprogramming

Search for a Value in Linked List in DSA Python

Choose your learning style10 modes available
Mental Model
Look at each item one by one until you find the value or reach the end.
Analogy: Like flipping through pages of a book to find a specific word, checking each page in order.
head -> [1] -> [2] -> [3] -> null
           ↑
Dry Run Walkthrough
Input: list: 1 -> 2 -> 3, search for value 2
Goal: Find if value 2 exists in the list and return True or False
Step 1: Check first node value
head -> [1] -> [2] -> [3] -> null
           ↑
Why: Start from the first node to see if it matches the search value
Step 2: Move to next node because 1 != 2
head -> [1] -> [2] -> [3] -> null
                ↑
Why: Current node value is not the target, so check the next node
Step 3: Found value 2 at current node
head -> [1] -> [2] -> [3] -> null
                ↑
Why: Current node value matches the search value, so stop searching
Result:
head -> [1] -> [2] -> [3] -> null
Found: True
Annotated Code
DSA Python
class Node:
    def __init__(self, val):
        self.val = val
        self.next = None

class LinkedList:
    def __init__(self):
        self.head = None

    def append(self, val):
        new_node = Node(val)
        if not self.head:
            self.head = new_node
            return
        curr = self.head
        while curr.next:
            curr = curr.next
        curr.next = new_node

    def search(self, target):
        curr = self.head
        while curr:
            if curr.val == target:
                return True
            curr = curr.next
        return False

# Driver code
ll = LinkedList()
ll.append(1)
ll.append(2)
ll.append(3)
result = ll.search(2)
print(f"Found: {result}")
while curr:
Traverse nodes one by one until end
if curr.val == target:
Check if current node value matches target
curr = curr.next
Move to next node to continue search
OutputSuccess
Found: True
Complexity Analysis
Time: O(n) because in worst case we check each node once
Space: O(1) because we use only a few variables regardless of list size
vs Alternative: Compared to arrays, linked list search is similar in time but does not allow direct access by index
Edge Cases
Empty list
Returns False immediately because there are no nodes
DSA Python
while curr:
Value not in list
Traverses entire list and returns False
DSA Python
return False
Value at head node
Returns True immediately without further traversal
DSA Python
if curr.val == target:
When to Use This Pattern
When you need to find if a value exists in a linked list, use linear search by checking each node one by one.
Common Mistakes
Mistake: Stopping search too early without checking all nodes
Fix: Continue traversing until you find the value or reach the end
Mistake: Not handling empty list causing errors
Fix: Check if head is None before starting traversal
Summary
Searches for a value by checking each node in order.
Use when you want to find if a value exists in a linked list.
The key is to move node by node until you find the value or reach the end.

Practice

(1/5)
1. What does searching for a value in a linked list involve?
easy
A. Sorting the list first then searching for the value
B. Jumping directly to the middle node to find the value
C. Checking each node one by one until the value is found or list ends
D. Using an index to access the value directly

Solution

  1. Step 1: Understand linked list traversal

    Linked lists do not have indexes, so we must check nodes one by one from the start.
  2. Step 2: Search each node for the value

    We compare the target value with each node's data until we find a match or reach the end.
  3. Final Answer:

    Checking each node one by one until the value is found or list ends -> Option C
  4. Quick Check:

    Search = Sequential check [OK]
Hint: Traverse nodes sequentially to find the value [OK]
Common Mistakes:
  • Assuming direct access by index
  • Trying to jump to middle node without traversal
  • Sorting before searching in linked list
2. Which of the following is the correct way to start searching for a value in a singly linked list named head?
easy
A. current = head.next
B. current = head
C. current = None
D. current = head.prev

Solution

  1. Step 1: Identify the starting node

    Search starts from the first node, which is referenced by head.
  2. Step 2: Assign current pointer correctly

    Set current = head to begin traversal from the first node.
  3. Final Answer:

    current = head -> Option B
  4. Quick Check:

    Start at head node [OK]
Hint: Always start search from head node [OK]
Common Mistakes:
  • Starting from head.next skips first node
  • Setting current to None causes no traversal
  • Using head.prev in singly linked list (no prev pointer)
3. What will be the output of the following code?
class Node:
    def __init__(self, data):
        self.data = data
        self.next = None

def search(head, target):
    current = head
    while current:
        if current.data == target:
            return True
        current = current.next
    return False

# Create linked list: 5 -> 10 -> 15 -> None
head = Node(5)
head.next = Node(10)
head.next.next = Node(15)

print(search(head, 10))
print(search(head, 20))
medium
A. True\nFalse
B. False\nTrue
C. True\nTrue
D. False\nFalse

Solution

  1. Step 1: Trace search for 10

    Nodes checked: 5 (no), 10 (yes) -> returns True.
  2. Step 2: Trace search for 20

    Nodes checked: 5, 10, 15 (none match) -> returns False.
  3. Final Answer:

    True\nFalse -> Option A
  4. Quick Check:

    10 found, 20 not found [OK]
Hint: Return True immediately when value found [OK]
Common Mistakes:
  • Returning False too early
  • Not moving to next node correctly
  • Confusing True/False outputs
4. Find the error in this search function for a linked list:
def search(head, target):
    current = head
    while current.next:
        if current.data == target:
            return True
        current = current.next
    return False
medium
A. The loop condition should be while current, not while current.next
B. The return False should be inside the loop
C. The function should return the node, not True
D. The current pointer should start at head.next

Solution

  1. Step 1: Analyze loop condition

    Using while current.next skips checking the last node.
  2. Step 2: Correct loop to include last node

    Change to while current to check all nodes including last.
  3. Final Answer:

    The loop condition should be while current, not while current.next -> Option A
  4. Quick Check:

    Loop must check all nodes [OK]
Hint: Use while current to include last node in search [OK]
Common Mistakes:
  • Stopping before last node
  • Returning False too early
  • Starting current at head.next skips first node
5. You have a linked list with nodes containing values: 3 -> 7 -> 3 -> 9 -> None. You want to find if value 3 exists and also count how many times it appears. Which approach correctly combines search and count?
hard
A. Use recursion to find first 3, then stop
B. Search for 3 once, then traverse again to count occurrences
C. Sort the list first, then count consecutive 3s
D. Traverse the list once, increment count each time node data equals 3, then check if count > 0

Solution

  1. Step 1: Traverse list once counting matches

    Check each node; if data is 3, increase count.
  2. Step 2: After traversal, check if count > 0

    If count is more than zero, value 3 exists and count shows occurrences.
  3. Final Answer:

    Traverse the list once, increment count each time node data equals 3, then check if count > 0 -> Option D
  4. Quick Check:

    Single pass count and check [OK]
Hint: Count while searching in one pass [OK]
Common Mistakes:
  • Doing two separate traversals
  • Sorting linked list unnecessarily
  • Stopping after first find without counting all
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard