user73105
1
Q:

Given M*N matrix, the task is to convert it into a doubly-linked list with four pointers that are next, previous, up, and down

// C++ programm to construct a Doubly
// linked linked list from 2D Matrix
 
#include <iostream>
using namespace std;
 
// define dimension of matrix
#define dim 3
 
// struct node of doubly linked
// list with four pointer
// next, prev, up, down
struct Node {
    int data;
    Node* next;
    Node* prev;
    Node* up;
    Node* down;
};
 
// function to create a new node
Node* createNode(int data)
{
    Node* temp = new Node();
    temp->data = data;
    temp->next = NULL;
    temp->prev = NULL;
    temp->up = NULL;
    temp->down = NULL;
    return temp;
}
 
// function to construct the
// doubly linked list
Node* constructDoublyListUtil(
    int mtrx[][dim],
    int i, int j,
    Node* curr)
{
 
    if (i >= dim || j >= dim) {
        return NULL;
    }
 
    // Create Node with value contain
    // in matrix at index (i, j)
    Node* temp = createNode(mtrx[i][j]);
 
    // Assign address of curr into
    // the prev pointer of temp
    temp->prev = curr;
 
    // Assign address of curr into
    // the up pointer of temp
    temp->up = curr;
 
    // Recursive call for next pointer
    temp->next
        = constructDoublyListUtil(
            mtrx, i, j + 1, temp);
 
    // Recursive call for down pointer
    temp->down
        = constructDoublyListUtil(
            mtrx, i + 1, j, temp);
 
    // Return newly constructed node
    // whose all four node connected
    // at it's appropriate position
    return temp;
}
 
// Function to construct the doubly linked list
Node* constructDoublyList(int mtrx[][dim])
{
    // function call for construct
    // the doubly linked list
    return constructDoublyListUtil(
        mtrx, 0, 0, NULL);
}
 
// function for displaying
// doubly linked list data
void display(Node* head)
{
    // pointer to move right
    Node* rPtr;
 
    // pointer to move down
    Node* dPtr = head;
 
    // loop till node->down is not NULL
    while (dPtr) {
 
        rPtr = dPtr;
 
        // loop till node->right is not NULL
        while (rPtr) {
            cout << rPtr->data << " ";
            rPtr = rPtr->next;
        }
 
        cout << "\n";
        dPtr = dPtr->down;
    }
}
 
// driver code
int main()
{
 
    // initialise matrix
    int mtrx[dim][dim] = {
        { 1, 2, 3 },
        { 4, 5, 6 },
        { 7, 8, 9 }
    };
 
    Node* list = constructDoublyList(mtrx);
 
    display(list);
 
    return 0;
}
0

New to Communities?

Join the community