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

• Difficulty Level : Basic
• Last Updated : 27 Jun, 2022

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:

```1) Initialize a node pointer, current = head.
2) Do following while current is not NULL
a) current->key is equal to the key being searched return true.
b) current = current->next
3) Return false ``` Following is iterative implementation of above algorithm to search a given key.

## C++

 `// Iterative C++ program to search ` `// an element in linked list ` `#include ` `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`

## C

 `// Iterative C program to search an element in linked list` `#include` `#include` `#include`   `/* 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;` `}`

## Java

 `// 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`

## Python3

 `# 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`

## C#

 `// 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`

## Javascript

 ``

Output

`Yes`

Time Complexity: O(n)
Auxiliary Space: O(1)

Recursive Solution:

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

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

## C++

 `// Recursive C++ program to search` `// an element in linked list ` `#include ` `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`

## C

 `// Recursive C program to search an element in linked list` `#include` `#include` `#include` `/* 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;` `}`

## Java

 `// 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`

## Python3

 `# 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`

## C#

 `// 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`

## Javascript

 ``

Output

`Yes`

Time Complexity: O(n)
Auxiliary Space: O(n)