Search an element in a Linked List (Iterative and Recursive)

Write a function that searches a given key ‘x’ in a given singly linked list. The function should return true if x is present in linked list and false otherwise.

   bool search(Node *head, int x) 

For example, if the key to be searched is 15 and linked list is 14->21->11->30->10, then function should return false. If key to be searched is 14, then the function should return true.

Iterative Solution



2) Initialize a node pointer, current = head.
3) Do following while current is not NULL
    a) current->key is equal to the key being searched return true.
    b) current = current->next
4) Return false 

Following is iterative implementation of above algorithm to search a given key.



C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// Iterative C++ program to search 
// an element in linked list 
#include <bits/stdc++.h>
using namespace std; 
  
/* Link list node */
class Node 
    public:
    int key; 
    Node* next; 
}; 
  
/* Given a reference (pointer to pointer) to the head 
of a list and an int, push a new node on the front 
of the list. */
void push(Node** head_ref, int new_key) 
    /* allocate node */
    Node* new_node = new Node();
  
    /* put in the key */
    new_node->key = new_key; 
  
    /* link the old list off the new node */
    new_node->next = (*head_ref); 
  
    /* move the head to point to the new node */
    (*head_ref) = new_node; 
  
/* Checks whether the value x is present in linked list */
bool search(Node* head, int x) 
    Node* current = head; // Initialize current 
    while (current != NULL) 
    
        if (current->key == x) 
            return true
        current = current->next; 
    
    return false
  
/* Driver program to test count function*/
int main() 
    /* Start with the empty list */
    Node* head = NULL; 
    int x = 21; 
  
    /* Use push() to construct below list 
    14->21->11->30->10 */
    push(&head, 10); 
    push(&head, 30); 
    push(&head, 11); 
    push(&head, 21); 
    push(&head, 14); 
  
    search(head, 21)? cout<<"Yes" : cout<<"No"
    return 0; 
  
// This is code is contributed by rathbhupendra

chevron_right


C

filter_none

edit
close

play_arrow

link
brightness_4
code

// Iterative C program to search an element in linked list
#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
  
/* Link list node */
struct Node
{
    int key;
    struct Node* next;
};
  
/* Given a reference (pointer to pointer) to the head
  of a list and an int, push a new node on the front
  of the list. */
void push(struct Node** head_ref, int new_key)
{
    /* allocate node */
    struct Node* new_node =
            (struct Node*) malloc(sizeof(struct Node));
  
    /* put in the key  */
    new_node->key  = new_key;
  
    /* link the old list off the new node */
    new_node->next = (*head_ref);
  
    /* move the head to point to the new node */
    (*head_ref)    = new_node;
}
  
/* Checks whether the value x is present in linked list */
bool search(struct Node* head, int x)
{
    struct Node* current = head;  // Initialize current
    while (current != NULL)
    {
        if (current->key == x)
            return true;
        current = current->next;
    }
    return false;
}
  
/* Driver program to test count function*/
int main()
{
    /* Start with the empty list */
    struct Node* head = NULL;
    int x = 21;
  
    /* Use push() to construct below list
     14->21->11->30->10  */
    push(&head, 10);
    push(&head, 30);
    push(&head, 11);
    push(&head, 21);
    push(&head, 14);
  
    search(head, 21)? printf("Yes") : printf("No");
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Iterative Java program to search an element
// in linked list
  
//Node class
class Node
{
    int data;
    Node next;
    Node(int d)
    {
        data = d;
        next = null;
    }
}
  
//Linked list class
class LinkedList
{
    Node head;    //Head of list
  
    //Inserts a new node at the front of the list
    public void push(int new_data)
    {
        //Allocate new node and putting data
        Node new_node = new Node(new_data);
  
        //Make next of new node as head
        new_node.next = head;
  
        //Move the head to point to new Node
        head = new_node;
    }
  
    //Checks whether the value x is present in linked list
    public boolean search(Node head, int x)
    {
        Node current = head;    //Initialize current
        while (current != null)
        {
            if (current.data == x)
                return true;    //data found
            current = current.next;
        }
        return false;    //data not found
    }
  
    //Driver function to test the above functions
    public static void main(String args[])
    {
  
        //Start with the empty list
        LinkedList llist = new LinkedList();
  
        /*Use push() to construct below list
        14->21->11->30->10  */
        llist.push(10);
        llist.push(30);
        llist.push(11);
        llist.push(21);
        llist.push(14);
  
        if (llist.search(llist.head, 21))
            System.out.println("Yes");
        else
            System.out.println("No");
    }
}
// This code is contributed by Pratik Agarwal

chevron_right


Python

filter_none

edit
close

play_arrow

link
brightness_4
code

# Iterative Python program to search an element
# in linked list
  
# Node class
class Node:
      
    # Function to initialise the node object
    def __init__(self, data):
        self.data = data # Assign data
        self.next = None # Initialize next as null
  
# Linked List class
class LinkedList:
    def __init__(self):
        self.head = None # Initialize head as None
  
    # This function insert a new node at the
    # beginning of the linked list
    def push(self, new_data):
      
        # Create a new Node
        new_node = Node(new_data)
  
        # 3. Make next of new Node as head
        new_node.next = self.head
  
        # 4. Move the head to point to new Node
        self.head = new_node
  
    # This Function checks whether the value
    # x present in the linked list 
    def search(self, x):
  
        # Initialize current to head
        current = self.head
  
        # loop till current not equal to None
        while current != None:
            if current.data == x:
                return True # data found
              
            current = current.next
          
        return False # Data Not found
  
  
# Code execution starts here
if __name__ == '__main__':
  
    # Start with the empty list
    llist = LinkedList()
  
    ''' Use push() to construct below list
        14->21->11->30->10 '''
    llist.push(10);
    llist.push(30);
    llist.push(11);
    llist.push(21);
    llist.push(14);
  
    if llist.search(21):
        print("Yes")
    else:
        print("No")
  
# This code is contributed by Ravi Shankar

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// Iterative C# program to search an element
// in linked list
using System;
  
// Node class
public class Node
{
    public int data;
    public Node next;
    public Node(int d)
    {
        data = d;
        next = null;
    }
}
  
// Linked list class
public class LinkedList
{
    Node head; // Head of list
  
    // Inserts a new node at the front of the list
    public void push(int new_data)
    {
        // Allocate new node and putting data
        Node new_node = new Node(new_data);
  
        // Make next of new node as head
        new_node.next = head;
  
        // Move the head to point to new Node
        head = new_node;
    }
  
    // Checks whether the value x is present in linked list
    public bool search(Node head, int x)
    {
        Node current = head; // Initialize current
        while (current != null)
        {
            if (current.data == x)
                return true; // data found
            current = current.next;
        }
        return false; // data not found
    }
  
    // Driver code
    public static void Main(String []args)
    {
  
        // Start with the empty list
        LinkedList llist = new LinkedList();
  
        /*Use push() to construct below list
        14->21->11->30->10 */
        llist.push(10);
        llist.push(30);
        llist.push(11);
        llist.push(21);
        llist.push(14);
  
        if (llist.search(llist.head, 21))
            Console.WriteLine("Yes");
        else
            Console.WriteLine("No");
    }
}
  
// This code contributed by Rajput-Ji

chevron_right



Output:

Yes



Recursive Solution

bool search(head, x)
1) If head is NULL, return false.
2) If head's key is same as x, return true;
2) Else return search(head->next, x) 

Following is recursive implementation of above algorithm to search a given key.

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// Recursive C++ program to search
// an element in linked list 
#include <bits/stdc++.h> 
using namespace std;
  
/* Link list node */
struct Node 
    int key; 
    struct Node* next; 
}; 
  
/* Given a reference (pointer to pointer) to the head 
of a list and an int, push a new node on the front 
of the list. */
void push(struct Node** head_ref, int new_key) 
    /* allocate node */
    struct Node* new_node = 
            (struct Node*) malloc(sizeof(struct Node)); 
  
    /* put in the key */
    new_node->key = new_key; 
  
    /* link the old list off the new node */
    new_node->next = (*head_ref); 
  
    /* move the head to point to the new node */
    (*head_ref) = new_node; 
  
/* Checks whether the value x is present in linked list */
bool search(struct Node* head, int x) 
    // Base case 
    if (head == NULL) 
        return false
      
    // If key is present in current node, return true 
    if (head->key == x) 
        return true
  
    // Recur for remaining list 
    return search(head->next, x); 
  
/* Driver code*/
int main() 
    /* Start with the empty list */
    struct Node* head = NULL; 
    int x = 21; 
  
    /* Use push() to construct below list 
    14->21->11->30->10 */
    push(&head, 10); 
    push(&head, 30); 
    push(&head, 11); 
    push(&head, 21); 
    push(&head, 14); 
  
    search(head, 21)? cout << "Yes" : cout << "No"
    return 0; 
  
// This code is contributed by SHUBHAMSINGH10

chevron_right


C

filter_none

edit
close

play_arrow

link
brightness_4
code

// Recursive C program to search an element in linked list
#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
/* Link list node */
struct Node
{
    int key;
    struct Node* next;
};
  
/* Given a reference (pointer to pointer) to the head
  of a list and an int, push a new node on the front
  of the list. */
void push(struct Node** head_ref, int new_key)
{
    /* allocate node */
    struct Node* new_node =
            (struct Node*) malloc(sizeof(struct Node));
  
    /* put in the key  */
    new_node->key  = new_key;
  
    /* link the old list off the new node */
    new_node->next = (*head_ref);
  
    /* move the head to point to the new node */
    (*head_ref)    = new_node;
}
  
/* Checks whether the value x is present in linked list */
bool search(struct Node* head, int x)
{
    // Base case
    if (head == NULL)
        return false;
      
    // If key is present in current node, return true
    if (head->key == x)
        return true;
  
    // Recur for remaining list
    return search(head->next, x);
}
  
/* Driver program to test count function*/
int main()
{
    /* Start with the empty list */
    struct Node* head = NULL;
    int x = 21;
  
    /* Use push() to construct below list
     14->21->11->30->10  */
    push(&head, 10);
    push(&head, 30);
    push(&head, 11);
    push(&head, 21);
    push(&head, 14);
  
    search(head, 21)? printf("Yes") : printf("No");
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Recursive Java program to search an element
// in linked list
  
  
// Node class
class Node
{
    int data;
    Node next;
    Node(int d)
    {
        data = d;
        next = null;
    }
}
  
// Linked list class
class LinkedList
{
    Node head;    //Head of list
  
    //Inserts a new node at the front of the list
    public void push(int new_data)
    {
        //Allocate new node and putting data
        Node new_node = new Node(new_data);
  
        //Make next of new node as head
        new_node.next = head;
  
        //Move the head to point to new Node
        head = new_node;
    }
  
    // Checks whether the value x is present
    // in linked list
    public boolean search(Node head, int x)
    {
        // Base case
        if (head == null)
            return false;
  
        // If key is present in current node,
        // return true
        if (head.data == x)
            return true;
  
        // Recur for remaining list
        return search(head.next, x);
    }
  
    // Driver function to test the above functions
    public static void main(String args[])
    {
        // Start with the empty list
        LinkedList llist = new LinkedList();
  
        /* Use push() to construct below list
           14->21->11->30->10  */
        llist.push(10);
        llist.push(30);
        llist.push(11);
        llist.push(21);
        llist.push(14);
  
        if (llist.search(llist.head, 21))
            System.out.println("Yes");
        else
            System.out.println("No");
    }
}
// This code is contributed by Pratik Agarwal

chevron_right


Output:

Yes

Python

filter_none

edit
close

play_arrow

link
brightness_4
code

# Recursive Python program to 
# search an element in linked list
  
# Node class
class Node:
      
    # Function to initialise 
    # the node object
    def __init__(self, data):
        self.data = data # Assign data
        self.next = None # Initialize next as null
  
class LinkedList:
      
    def __init__(self):
        self.head = None # Initialize head as None
  
    # This function insert a new node at 
    # the beginning of the linked list
    def push(self, new_data):
      
        # Create a new Node
        new_node = Node(new_data)
  
        # Make next of new Node as head
        new_node.next = self.head
  
        # Move the head to 
        # point to new Node
        self.head = new_node
      
      
    # Checks whether the value key 
    # is present in linked list 
    def search(self, li, key):
          
        # Base case
        if(not li):
            return False
          
        # If key is present in 
        # current node, return true
        if(li.data == key):
            return True
          
        # Recur for remaining list
        return self.search(li.next, key)
      
# Driver Code            
if __name__=='__main__':
  
    li = LinkedList()
      
    li.push(1)
    li.push(2)
    li.push(3)
    li.push(4)
      
    key = 4
      
    if li.search(li.head,key):
        print("Yes")
    else:
        print("No")
      
# This code is contributed
# by Manoj Sharma

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// Recursive C# program to search 
// an element in linked list
using System;
  
// Node class
public class Node
{
    public int data;
    public Node next;
    public Node(int d)
    {
        data = d;
        next = null;
    }
}
  
// Linked list class
public class LinkedList
{
    Node head; //Head of list
  
    //Inserts a new node at the front of the list
    public void push(int new_data)
    {
        //Allocate new node and putting data
        Node new_node = new Node(new_data);
  
        //Make next of new node as head
        new_node.next = head;
  
        //Move the head to point to new Node
        head = new_node;
    }
  
    // Checks whether the value x is present
    // in linked list
    public bool search(Node head, int x)
    {
        // Base case
        if (head == null)
            return false;
  
        // If key is present in current node,
        // return true
        if (head.data == x)
            return true;
  
        // Recur for remaining list
        return search(head.next, x);
    }
  
    // Driver code
    public static void Main()
    {
        // Start with the empty list
        LinkedList llist = new LinkedList();
  
        /* Use push() to construct below list
        14->21->11->30->10 */
        llist.push(10);
        llist.push(30);
        llist.push(11);
        llist.push(21);
        llist.push(14);
  
        if (llist.search(llist.head, 21))
            Console.WriteLine("Yes");
        else
            Console.WriteLine("No");
    }
}
  
// This code is contributed by PrinciRaj1992

chevron_right



Output:

Yes

This article is contributed by Ravi. Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above

GeeksforGeeks has prepared a complete interview preparation course with premium videos, theory, practice problems, TA support and many more features. Please refer Placement 100 for details




My Personal Notes arrow_drop_up

Article Tags :
Practice Tags :


40


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.