Search an Element in Doubly Circular Linked List

Pre-requisite: Convert an Array to a Circular Doubly Linked List, Doubly Circular Linked List

Given a Doubly circular linked list. The task is to find the position of an element in the list.

Image Representation:
Search Image


  • Declare a temp pointer, and initialize it to head of the list.
  • Iterate the loop until temp reaches start address (last node in the list, as it is in a circular fashion), check for the n element, whether present or not.
  • If it is present, raise a flag, increment count and break the loop.
  • At the last, as the last node is not visited yet check for the n element if present do step 3.

Below program illustrate the above approach:





// C++ program to illustrate inserting a Node in 
// a Cicular Doubly Linked list in begging, end 
// and middle 
#include <bits/stdc++.h> 
using namespace std; 
// Structure of a Node 
struct Node 
    int data; 
    struct Node *next; 
    struct Node *prev; 
// Function to insert a node at the end 
void insertNode(struct Node** start, int value) 
    // If the list is empty, create a single node 
    // circular and doubly list 
    if (*start == NULL) 
        struct Node* new_node = new Node; 
        new_node->data = value; 
        new_node->next = new_node->prev = new_node; 
        *start = new_node; 
    // If list is not empty 
    /* Find last node */
    Node *last = (*start)->prev; 
    // Create Node dynamically 
    struct Node* new_node = new Node; 
    new_node->data = value; 
    // Start is going to be next of new_node 
    new_node->next = *start; 
    // Make new node previous of start 
    (*start)->prev = new_node; 
    // Make last preivous of new node 
    new_node->prev = last; 
    // Make new node next of old last 
    last->next = new_node; 
// Function to display the
// circular doubly linked list
void displayList(struct Node* start) 
    struct Node *temp = start; 
    while (temp->next != start) 
        printf("%d ", temp->data); 
        temp = temp->next; 
    printf("%d ", temp->data); 
// Function to search the particular element
// from the list
int searchList(struct Node* start, int search)
    // Declare the temp variable
    struct Node *temp = start;
    // Declare other control
    // variable for the searching
    int count=0,flag=0,value;
    // If start is NULL return -1
    if(temp == NULL)
        return -1;
        // Move the temp pointer until, 
        // temp->next doesn't move
        // start address (Circular Fashion)
        while(temp->next != start)
            // Increment count for location
            // If it is found raise the
            // flag and break the loop
            if(temp->data == search)
                flag = 1;
            // Increment temp pointer
            temp = temp->next;   
        // Check whether last element in the
        // list content the value if contain, 
        // raise a flag and increment count
        if(temp->data == search)
            flag = 1;
        // If flag is true, then element
        // found, else not
        if(flag == 1)
            cout<<"\n"<<search <<" found at location "<<
            cout<<"\n"<<search <<" not found"<<endl;
// Driver code
int main() 
    /* Start with the empty list */
    struct Node* start = NULL; 
    // Insert 4. So linked list becomes 4->NULL 
    insertNode(&start, 4);
    // Insert 5. So linked list becomes 4->5 
    insertNode(&start, 5);  
    // Insert 7. So linked list 
    // becomes 4->5->7 
    insertNode(&start, 7); 
    // Insert 8. So linked list 
    // becomes 4->5->7->8 
    insertNode(&start, 8); 
    // Insert 6. So linked list 
    // becomes 4->5->7->8->6 
    insertNode(&start, 6); 
    printf("Created circular doubly linked list is: "); 
    searchList(start, 5);
    return 0; 



Created circular doubly linked list is: 4 5 7 8 6 
5 found at location 2

Time Complexity: As it uses linear search, so complexity is O(n).

My Personal Notes arrow_drop_up

सर्वशक्तिशाली इकलौता

If you like GeeksforGeeks and would like to contribute, you can also write an article using or mail your article to See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.