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.
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
Following is iterative implementation of above algorithm to search a given key.
// 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]? coutnext;
}
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;
}
|
// 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
|
# 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
|
// 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
|
// Iterative javascript program
// to search an element
// in linked list
//Node class
class Node {
constructor[d] {
this.data = d;
this.next = null;
}
}
// Linked list class
var head; // Head of list
// Inserts a new node at the front of the list
function push[new_data]
{
// Allocate new node and putting data
var 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
function search[ head , x]
{
var 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
// Start with the empty list
/*
Use push[] to construct below
list 14->21->11->30->10
*/
push[10];
push[30];
push[11];
push[21];
push[14];
if [search[head, 21]]
document.write["Yes"];
else
document.write["No"];
// This code contributed by aashish2995
|
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; 3] Else return search[head->next, x]Following is the recursive implementation of the above algorithm to search a given key.
// 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 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;
}
|
// 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
|
# 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
|
// 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
|
// Recursive javascript program to search an element
// in linked list
// Node class
class Node {
constructor[val] {
this.data = val;
this.next = null;
}
}
// Linked list class
var head; // Head of list
// Inserts a new node at the front of the list
function push[new_data] {
// Allocate new node and putting data
var 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
function search[head , 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
// Start with the empty list
/*
* Use push[] to construct below list 14->21->11->30->10
*/
push[10];
push[30];
push[11];
push[21];
push[14];
if [search[head, 21]]
document.write["Yes"];
else
document.write["No"];
// This code contributed by gauravrajput1
|
Output:
YesThis 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
Quick links
- Using loop
- Using recursion