w3resource

C Exercises: Create and display a doubly linked list in reverse order


2. Reverse Display of Doubly Linked List

Write a program in C to create a doubly linked list and display it in reverse order.

Visual Presentation:

C Exercises: Create and display a doubly linked list in revsese order

Sample Solution:

C Code:

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

// Structure for a doubly linked list node
struct node {
    int num;
    struct node *preptr;
    struct node *nextptr;
} *stnode, *ennode;

// Function prototypes
void DlListcreation(int n);
void displayDlListRev();

int main() {
    int n;
    stnode = NULL;
    ennode = NULL;
    printf("\n\n Doubly Linked List: Create and display a doubly linked list in reverse order:\n");
    printf("------------------------------------------------------------------------------------\n");

    printf(" Input the number of nodes : ");
    scanf("%d", &n);

    DlListcreation(n);     // Create a doubly linked list
    displayDlListRev();    // Display the created doubly linked list in reverse order
    return 0;
}

// Function to create a doubly linked list
void DlListcreation(int n) {
    int i, num;
    struct node *fnNode;

    if (n >= 1) {
        stnode = (struct node *)malloc(sizeof(struct node)); // Allocate memory for the first node

        if (stnode != NULL) {
            printf(" Input data for node 1 : ");
            scanf("%d", &num);

            stnode->num = num;
            stnode->preptr = NULL;
            stnode->nextptr = NULL;
            ennode = stnode; // Assign stnode as the last node

            // Create nodes and link them to form the doubly linked list
            for (i = 2; i <= n; i++) {
                fnNode = (struct node *)malloc(sizeof(struct node));
                if (fnNode != NULL) {
                    printf(" Input data for node %d : ", i);
                    scanf("%d", &num);
                    fnNode->num = num;
                    fnNode->preptr = ennode;
                    fnNode->nextptr = NULL;

                    ennode->nextptr = fnNode;
                    ennode = fnNode;
                } else {
                    printf(" Memory can not be allocated.");
                    break;
                }
            }
        } else {
            printf(" Memory can not be allocated.");
        }
    }
}

// Function to display the doubly linked list in reverse order
void displayDlListRev() {
    struct node *tmp;
    int n = 0;

    if (ennode == NULL) {
        printf(" No data found in the List yet.");
    } else {
        tmp = ennode;
        printf("\n Data in reverse order are :\n");

        // Traverse the list in reverse and display each node's data
        while (tmp != NULL) {
            printf(" Data in node %d : %d\n", n + 1, tmp->num);
            n++;
            tmp = tmp->preptr; // Move to the previous node
        }
    }
}

Sample Output:

 Doubly Linked List : Create and display a doubly linked list in reverse order :                              
------------------------------------------------------------------------------------                          
 Input the number of nodes : 3                                                                                
 Input data for node 1 : 2                                                                                    
 Input data for node 2 : 5                                                                                    
 Input data for node 3 : 8                                                                                    
                                                                                                              
 Data in reverse order are :                                                                                  
 Data in node 1 : 8                                                                                           
 Data in node 2 : 5                                                                                           
 Data in node 3 : 2 

Flowchart:

Flowchart: Create and display a doubly linked list in revsese order

DlListcreation() :

Flowchart: Create and display a doubly linked list in revsese order

displayDlListRev() :

Flowchart: Create and display a doubly linked list in revsese order

For more Practice: Solve these Related Problems:

  • Write a C program to traverse a doubly linked list in reverse order using recursion without altering the node links.
  • Write a C program to display a doubly linked list in reverse order by temporarily swapping the next and previous pointers.
  • Write a C program to recursively print a doubly linked list in reverse while counting the number of nodes traversed.
  • Write a C program to display the elements of a doubly linked list in reverse order using a while loop and a tail pointer.

Go to:


PREV : Doubly Linked List Creation.
NEXT : Insert at Beginning of Doubly Linked List.

C Programming Code Editor:



Have another way to solve this solution? Contribute your code (and comments) through Disqus.

What is the difficulty level of this exercise?

Test your Programming skills with w3resource's quiz.



Follow us on Facebook and Twitter for latest update.