Skip to content

Commit

Permalink
Merge pull request #1131 from divyanshugit/dev
Browse files Browse the repository at this point in the history
Reverse doubly linked list in C++
  • Loading branch information
i-vishi authored Oct 7, 2020
2 parents 9cfaf78 + eb1ff96 commit a3a5f3a
Showing 1 changed file with 111 additions and 0 deletions.
111 changes: 111 additions & 0 deletions LinkedList/Reverse-DoublyLinkedList/CPP/ReverseDoublyLinkedList.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
// Reverse of doubly linked list in C++
// author: @divyanshugit
#include <bits/stdc++.h>

using namespace std;

class DoublyLinkedListNode {
public:
int data;
DoublyLinkedListNode *next;
DoublyLinkedListNode *prev;

DoublyLinkedListNode(int node_data) {
this->data = node_data;
this->next = nullptr;
this->prev = nullptr;
}
};

class DoublyLinkedList {
public:
DoublyLinkedListNode *head;
DoublyLinkedListNode *tail;

DoublyLinkedList() {
this->head = nullptr;
this->tail = nullptr;
}

void insert_node(int node_data) {
DoublyLinkedListNode* node = new DoublyLinkedListNode(node_data);

if (!this->head) {
this->head = node;
} else {
this->tail->next = node;
node->prev = this->tail;
}

this->tail = node;
}
};

void print_doubly_linked_list(DoublyLinkedListNode* node, string sep, ofstream& fout) {
while (node) {
fout << node->data;

node = node->next;

if (node) {
fout << sep;
}
}
}

void free_doubly_linked_list(DoublyLinkedListNode* node) {
while (node) {
DoublyLinkedListNode* temp = node;
node = node->next;

free(temp);
}
}


DoublyLinkedListNode* reverse(DoublyLinkedListNode* head) {

DoublyLinkedListNode* temp = head->next;
head->next = head->prev;
head->prev = temp;
if(head->prev == NULL)
return head;
return reverse(head->prev);

}

int main() {

ofstream fout(getenv("OUTPUT_PATH"));

int t;
cin >> t;
cin.ignore(numeric_limits<streamsize>::max(), '\n');

for (int t_itr = 0; t_itr < t; t_itr++) {
DoublyLinkedList* llist = new DoublyLinkedList();

int llist_count;
cin >> llist_count;
cin.ignore(numeric_limits<streamsize>::max(), '\n');

for (int i = 0; i < llist_count; i++) {
int llist_item;
cin >> llist_item;
cin.ignore(numeric_limits<streamsize>::max(), '\n');

llist->insert_node(llist_item);
}

DoublyLinkedListNode* llist1 = reverse(llist->head);

print_doubly_linked_list(llist1, " ", fout);
fout << "\n";

free_doubly_linked_list(llist1);
}

fout.close();

return 0;
}

0 comments on commit a3a5f3a

Please sign in to comment.