

- Trending Categories
Data Structure
Networking
RDBMS
Operating System
Java
iOS
HTML
CSS
Android
Python
C Programming
C++
C#
MongoDB
MySQL
Javascript
PHP
- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who
Binary Search on Singly Linked List in C++
A singly linked list is a linked list (a data structure that stores a node’s value and the memory location of the next node) which can go only one way.
A binary search is a search algorithm based on divide and rule. That finds the middle element of the structure and compares and uses recursive calls to the same algorithm for inequality.
Here, we are given a singly linked list and an element to be found using a binary search.
Since the singly linked list is a data structure that uses only one pointer, it is not easy to find its middle element. To mid of singly linked list, we use two pointer approaches.
ALGORITHM
Step 1 : Initialize, start_node (head of list) and last_node (will have last value) , mid_node (middle node of the structure). Step 2 : Compare mid_node to element Step 2.1 : if mid_node = element, return value “found”. Step 2.2 : if mid_node > element, call binary search on lower_Half. Step 2.3 : if mid_node < element, call binary search on upper_Half. Step 3 : if entire list is traversed, return “Not found”.
Example
#include<stdio.h> #include<stdlib.h> struct Node{ int data; struct Node* next; }; Node *newNode(int x){ struct Node* temp = new Node; temp->data = x; temp->next = NULL; return temp; } struct Node* mid_node(Node* start, Node* last){ if (start == NULL) return NULL; struct Node* slow = start; struct Node* fast = start -> next; while (fast != last){ fast = fast -> next; if (fast != last){ slow = slow -> next; fast = fast -> next; } } return slow; } struct Node* binarySearch(Node *head, int value){ struct Node* start = head; struct Node* last = NULL; do{ Node* mid = mid_node(start, last); if (mid == NULL) return NULL; if (mid -> data == value) return mid; else if (mid -> data < value) start = mid -> next; else last = mid; } while (last == NULL || last != start); return NULL; } int main(){ Node *head = newNode(54); head->next = newNode(12); head->next->next = newNode(18); head->next->next->next = newNode(23); head->next->next->next->next = newNode(52); head->next->next->next->next->next = newNode(76); int value = 52; if (binarySearch(head, value) == NULL) printf("Value is not present in linked list\n"); else printf("The value is present in linked list\n"); return 0; }
Output
The value is present in linked list
- Related Questions & Answers
- Program to convert binary search tree to a singly linked list in C++?
- Search an element in the given singly Linked List using C++
- Convert singly linked list into circular linked list in C++
- Convert singly linked list into XOR linked list in C++
- C++ Program to Implement Singly Linked List
- C++ Program to Implement Circular Singly Linked List
- C++ Program to Implement Sorted Singly Linked List
- Difference between Singly linked list and Doubly linked list in Java
- Find middle of singly linked list Recursively in C++
- Singly Linked List as Circular in Javascript
- C++ Program to Implement Sorted Circularly Singly Linked List
- How to implement Traversal in Singly Linked List using C#?
- Remove elements from singly linked list in JavaScript
- Program to convert a linked list into a binary search tree in C++
- Linked List in Binary Tree in C++
Advertisements