Convert an Array to a Circular Doubly Linked List

Prerequisite: Doubly Linked list, Circular Linked List, Circular Doubly Linked List

Given an array of N elements. The task is to write a program to convert the array into a circular doubly linked list.

Image Representation



The idea is to start traversing the array and for every array element create a new list node and assign the prev and next pointers of this node accordingly.

  • Create a pointer start to point to the starting of the list which will initially point to NULL(Empty list).
  • For the first element of the array, create a new node and put that node’s prev and next pointers to point to start to maintain the circular fashion of the list.
  • For the rest of the array elements, insert those elements to the end of the created circular doubly linked list.

Below is the implementation of above idea:

filter_none

edit
close

play_arrow

link
brightness_4
code

// CPP program to convert array to 
// circular doubly linked list
  
#include<iostream>
using namespace std;
  
// Doubly linked list node
struct node
{
    int data;
    struct node *next;
    struct node *prev;
};
  
// Utility function to create a node in memory
struct node* getNode()
{
    return ((struct node *)malloc(sizeof(struct node)));
}
  
// Function to display the list
int displayList(struct node *temp)
{
    struct node *t = temp;
    if(temp == NULL)
        return 0;
    else
    {   
        cout<<"The list is: ";
          
        while(temp->next != t)
        {
            cout<<temp->data<<" ";
            temp = temp->next;
        }
          
        cout<<temp->data;
          
        return 1;
    
}
  
// Function to convert array into list
void createList(int arr[], int n, struct node **start)
{
    // Declare newNode and temporary pointer
    struct node *newNode,*temp;
    int i;
      
    // Iterate the loop until array length
    for(i=0;i<n;i++)
    {
        // Create new node
        newNode = getNode();
          
        // Assign the array data
        newNode->data = arr[i];
          
        // If it is first element
        // Put that node prev and next as start
        // as it is circular
        if(i==0)
        {
            *start = newNode;
            newNode->prev = *start;
            newNode->next = *start;
        }
        else
        {   
            // Find the last node
            temp = (*start)->prev;
              
            // Add the last node to make them
            // in circular fashion
            temp->next = newNode;
            newNode->next = *start;
            newNode->prev = temp;
            temp = *start;
            temp->prev = newNode;
        }
    }
}
  
// Driver Code
int main()
{
    // Array to be converted
    int arr[] = {1,2,3,4,5};
    int n = sizeof(arr) / sizeof(arr[0]);
      
    // Start Pointer
    struct node *start = NULL;
      
    // Create the List
    createList(arr, n, &start);
      
    // Display the list
    displayList(start);
      
    return 0;
}

chevron_right


Output:

The list is: 1 2 3 4 5


My Personal Notes arrow_drop_up

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

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. 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.