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:
Algorithm:
- Declare a temp pointer, and initialize it to the head of the list.
- Iterate the loop until temp reaches the start address (last node in the list, as it is in a circular fashion), and 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 does step 3.
The below program illustrates the above approach:
C++
// C++ program to illustrate inserting a Node in // a Circular 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; return; } // 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 previous 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 listvoid 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 listint 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; else { // Move the temp pointer until, // temp->next doesn't move // start address (Circular Fashion) while(temp->next != start) { // Increment count for location count++; // If it is found raise the // flag and break the loop if(temp->data == search) { flag = 1; count--; break; } // 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) { count++; flag = 1; } // If flag is true, then element // found, else not if(flag == 1) cout<<"\n"<<search <<" found at location "<< count<<endl; else cout<<"\n"<<search <<" not found"<<endl; }}// Driver codeint 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: "); displayList(start); searchList(start, 5); return 0; } |
Java
// Java program to illustrate inserting // a Node in a Circular Doubly Linked list // in begging, end and middle class GFG{ // Structure of a Node static class Node { int data; Node next; Node prev; }; // Function to insert a node at the end static Node insertNode(Node start, int value) { // If the list is empty, create a single node // circular and doubly list if (start == null) { Node new_node = new Node(); new_node.data = value; new_node.next = new_node.prev = new_node; start = new_node; return new_node; } // If list is not empty // Find last node / Node last = (start).prev; // Create Node dynamically 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 previous of new node new_node.prev = last; // Make new node next of old last last.next = new_node; return start;} // Function to display the // circular doubly linked list static void displayList(Node start) { Node temp = start; while (temp.next != start) { System.out.printf("%d ", temp.data); temp = temp.next; } System.out.printf("%d ", temp.data); } // Function to search the particular element // from the list static int searchList(Node start, int search) { // Declare the temp variable 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; else { // Move the temp pointer until, // temp.next doesn't move // start address (Circular Fashion) while(temp.next != start) { // Increment count for location count++; // If it is found raise the // flag and break the loop if(temp.data == search) { flag = 1; count--; break; } // 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) { count++; flag = 1; } // If flag is true, then element // found, else not if(flag == 1) System.out.println("\n"+search +" found at location "+ count); else System.out.println("\n"+search +" not found"); } return -1;} // Driver code public static void main(String args[]){ // Start with the empty list / Node start = null; // Insert 4. So linked list becomes 4.null start= insertNode(start, 4); // Insert 5. So linked list becomes 4.5 start= insertNode(start, 5); // Insert 7. So linked list // becomes 4.5.7 start= insertNode(start, 7); // Insert 8. So linked list // becomes 4.5.7.8 start= insertNode(start, 8); // Insert 6. So linked list // becomes 4.5.7.8.6 start= insertNode(start, 6); System.out.printf("Created circular doubly linked list is: "); displayList(start); searchList(start, 5); } }// This code is contributed by Arnab Kundu |
Python3
# Python3 program to illustrate inserting a Node in # a Circular Doubly Linked list in begging, end # and middle import math# Structure of a Node class Node: def __init__(self, data): self.data = data self.next = None# Function to insert a node at the end def insertNode(start, value): # If the list is empty, create a single node # circular and doubly list if (start == None) : new_node = Node(value) new_node.data = value new_node.next = new_node new_node.prev = new_node start = new_node return new_node # If list is not empty # Find last node */ last = start.prev # Create Node dynamically new_node = Node(value) 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 previous of new node new_node.prev = last # Make new node next of old last last.next = new_node return start# Function to display the# circular doubly linked listdef displayList(start): temp = start while (temp.next != start): print(temp.data, end = " ") temp = temp.next print(temp.data) # Function to search the particular element# from the listdef searchList(start, search): # Declare the temp variable temp = start # Declare other control # variable for the searching count = 0 flag = 0 value = 0 # If start is None return -1 if(temp == None): return -1 else: # Move the temp pointer until, # temp.next doesn't move # start address (Circular Fashion) while(temp.next != start): # Increment count for location count = count + 1 # If it is found raise the # flag and break the loop if(temp.data == search): flag = 1 count = count - 1 break # 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): count = count + 1 flag = 1 # If flag is true, then element # found, else not if(flag == 1): print(search,"found at location ", count) else: print(search, " not found") return -1# Driver codeif __name__=='__main__': # Start with the empty list */ start = None # Insert 4. So linked list becomes 4.None start = insertNode(start, 4) # Insert 5. So linked list becomes 4.5 start = insertNode(start, 5) # Insert 7. So linked list # becomes 4.5.7 start = insertNode(start, 7) # Insert 8. So linked list # becomes 4.5.7.8 start = insertNode(start, 8) # Insert 6. So linked list # becomes 4.5.7.8.6 start = insertNode(start, 6) print("Created circular doubly linked list is: ", end = "") displayList(start) searchList(start, 5)# This article contributed by Srathore |
C#
// C# Program to Reverse a List using Data Swapping using System;class GFG{ // Structure of a Node public class Node { public int data; public Node next; public Node prev; }; // Function to insert a node at the end static Node insertNode(Node start, int value) { // If the list is empty, create a single node // circular and doubly list Node new_node = new Node(); if (start == null) { new_node.data = value; new_node.next = new_node.prev = new_node; start = new_node; return new_node; } // If list is not empty // Find last node / Node last = (start).prev; // Create Node dynamically 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 previous of new node new_node.prev = last; // Make new node next of old last last.next = new_node; return start; } // Function to display the // circular doubly linked list static void displayList(Node start) { Node temp = start; while (temp.next != start) { Console.Write("{0} ", temp.data); temp = temp.next; } Console.Write("{0} ", temp.data); } // Function to search the particular element // from the list static int searchList(Node start, int search) { // Declare the temp variable 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; else { // Move the temp pointer until, // temp.next doesn't move // start address (Circular Fashion) while(temp.next != start) { // Increment count for location count++; // If it is found raise the // flag and break the loop if(temp.data == search) { flag = 1; count--; break; } // 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) { count++; flag = 1; } // If flag is true, then element // found, else not if(flag == 1) Console.WriteLine("\n"+search +" found at location "+ count); else Console.WriteLine("\n"+search +" not found"); } return -1; } // Driver code public static void Main(String []args) { // Start with the empty list / Node start = null; // Insert 4. So linked list becomes 4.null start= insertNode(start, 4); // Insert 5. So linked list becomes 4.5 start= insertNode(start, 5); // Insert 7. So linked list // becomes 4.5.7 start= insertNode(start, 7); // Insert 8. So linked list // becomes 4.5.7.8 start= insertNode(start, 8); // Insert 6. So linked list // becomes 4.5.7.8.6 start= insertNode(start, 6); Console.Write("Created circular doubly linked list is: "); displayList(start); searchList(start, 5); } }// This code has been contributed by 29AjayKumar |
Javascript
<script>// JavaScript program to illustrate inserting // a Node in a Circular Doubly Linked list // in begging, end and middle class Node { constructor() { this.data=0; this.next=this.prev=null; }}// Function to insert a node at the endfunction insertNode(start,value){ // If the list is empty, create a single node // circular and doubly list if (start == null) { let new_node = new Node(); new_node.data = value; new_node.next = new_node.prev = new_node; start = new_node; return new_node; } // If list is not empty // Find last node / let last = (start).prev; // Create Node dynamically let 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 previous of new node new_node.prev = last; // Make new node next of old last last.next = new_node; return start;}// Function to display the // circular doubly linked list function displayList(start){ let temp = start; while (temp.next != start) { document.write(temp.data+" "); temp = temp.next; } document.write(temp.data+" ");}// Function to search the particular element // from the list function searchList(start,search){ // Declare the temp variable let temp = start; // Declare other control // variable for the searching let count = 0, flag = 0, value; // If start is null return -1 if(temp == null) return -1; else { // Move the temp pointer until, // temp.next doesn't move // start address (Circular Fashion) while(temp.next != start) { // Increment count for location count++; // If it is found raise the // flag and break the loop if(temp.data == search) { flag = 1; count--; break; } // 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) { count++; flag = 1; } // If flag is true, then element // found, else not if(flag == 1) document.write("<br>"+search +" found at location "+ count); else document.write("<br>"+search +" not found"); } return -1;}// Driver code // Start with the empty list /let start = null; // Insert 4. So linked list becomes 4.null start= insertNode(start, 4); // Insert 5. So linked list becomes 4.5 start= insertNode(start, 5); // Insert 7. So linked list // becomes 4.5.7 start= insertNode(start, 7); // Insert 8. So linked list // becomes 4.5.7.8 start= insertNode(start, 8); // Insert 6. So linked list // becomes 4.5.7.8.6 start= insertNode(start, 6); document.write("Created circular doubly linked list is: "); displayList(start); searchList(start, 5); // This code is contributed by avanitrachhadiya2155</script> |
Created circular doubly linked list is: 4 5 7 8 6 5 found at location 2
Time Complexity: O(n), as we are using a loop to traverse n times. Where n is the number of nodes in the linked list.
Auxiliary Space: O(1), as we are not using any extra space.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!

