# searching a node in singly linked list

Check whether the given key is present or not in the linked list.

## Example

Linked List : 10 20 30 40 NULL.

20

Search Found

100

## Algorithm

1. Iterate the linked list using a loop.

2. If any node has the given key value, return 1.

3. If the program execution comes out of the loop (the given key is not present in the linked list), return -1.

Search Found        => return 1.

## 1. Iterate the linked list using a loop.

```int searchNode(struct node *head, int key)
{
struct node *temp = head;

while(temp != NULL)
{
temp = temp->next;
}

}
```

## 2. Return 1 on search found

```int searchNode(struct node *head, int key)
{
struct node *temp = head;

while(temp != NULL)
{

if(temp->data == key)
return 1;

temp = temp->next;
}
}
```

#### Visual Representation

Linked List : 10 20 30 NULL

Key : 20

1. temp holding the address of the head node. temp->data = 10. key = 20. temp->data != key, so move the temp variable to the next node.

2. Now, temp->data = 20. key = 20. temp->key == key. "Seach Found".

## 3. Return -1 on search not found

```int searchNode(struct node *head, int key)
{
struct node *temp = head;

while(temp != NULL)
{
if(temp->data == key)
return 1;
temp = temp->next;
}

return -1;

}
```

#### Visual Representation

Linked List : 10 20 30 NULL

Key : 100

1. temp->data = 10. key = 100. temp->data != key. Hence move the temp variable to the next node.

2. temp->data = 20. key = 100. temp->data != key. Hence move the temp variable to the next node.

3. temp->data = 30. key = 100. temp->data != key. Hence move the temp variable to the next node which is NULL.

4. Finally, the program execution will come out of the loop. So, it will return -1.

## Implementation of searching a node in singly linked list

Example

```/*
* Program  : Searching an element in the linked list
* Language : C
*/

#include<stdio.h>
#include<stdlib.h>

struct node
{
int data;
struct node *next;
};

{
//create a new node
struct node *newNode = malloc(sizeof(struct node));
newNode->data = val;
newNode->next     = NULL;

//if head is NULL, it is an empty list
//Otherwise, find the last node and add the newNode
else
{
struct node *lastNode = *head;

//last node's next address will be NULL.
while(lastNode->next != NULL)
{
lastNode = lastNode->next;
}

//add the newNode at the end of the linked list
lastNode->next = newNode;
}

}

int searchNode(struct node *head,int key)
{
struct node *temp = head;

//iterate the entire linked list and print the data
while(temp != NULL)
{
//key found return 1.
if(temp->data == key)
return 1;
temp = temp->next;
}
return -1;
}

int main()
{
struct node *head = NULL;

//change the key and try it yourself.