From 54c96e408bcb84747a02ca0c54b525dcb90a76e3 Mon Sep 17 00:00:00 2001 From: Divyanshu Kumar <53843818+divyanshugit@users.noreply.github.com> Date: Thu, 1 Oct 2020 09:48:42 +0530 Subject: [PATCH 1/3] Reverse doubly linked list in C++ --- LinkedList/C++/ReverseDoublyLinkedList.cpp | 111 +++++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 LinkedList/C++/ReverseDoublyLinkedList.cpp diff --git a/LinkedList/C++/ReverseDoublyLinkedList.cpp b/LinkedList/C++/ReverseDoublyLinkedList.cpp new file mode 100644 index 000000000..3dc3abe9d --- /dev/null +++ b/LinkedList/C++/ReverseDoublyLinkedList.cpp @@ -0,0 +1,111 @@ +// Reverse of doubly linked list in C++ +// author: @divyanshugit +#include + +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::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::max(), '\n'); + + for (int i = 0; i < llist_count; i++) { + int llist_item; + cin >> llist_item; + cin.ignore(numeric_limits::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; +} From 2e8d9e1c7f3c31caf557a63f3650ea754932be22 Mon Sep 17 00:00:00 2001 From: Divyanshu Kumar <53843818+divyanshugit@users.noreply.github.com> Date: Wed, 7 Oct 2020 08:48:35 +0530 Subject: [PATCH 2/3] added: ReverseDoublyLinkedList --- .../CPP/ReverseDoublyLinkedList.cpp | 111 ++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 LinkedList/Reverse-DoublyLinkedList/CPP/ReverseDoublyLinkedList.cpp diff --git a/LinkedList/Reverse-DoublyLinkedList/CPP/ReverseDoublyLinkedList.cpp b/LinkedList/Reverse-DoublyLinkedList/CPP/ReverseDoublyLinkedList.cpp new file mode 100644 index 000000000..b845e78c6 --- /dev/null +++ b/LinkedList/Reverse-DoublyLinkedList/CPP/ReverseDoublyLinkedList.cpp @@ -0,0 +1,111 @@ +// Reverse of doubly linked list in C++ +// author: @divyanshugit +#include + +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::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::max(), '\n'); + + for (int i = 0; i < llist_count; i++) { + int llist_item; + cin >> llist_item; + cin.ignore(numeric_limits::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; +} From eb1ff96870f13f5fde4e16fe9e18bb5c7e4167b1 Mon Sep 17 00:00:00 2001 From: Divyanshu Kumar <53843818+divyanshugit@users.noreply.github.com> Date: Wed, 7 Oct 2020 08:49:54 +0530 Subject: [PATCH 3/3] Moved this file in new directory --- LinkedList/C++/ReverseDoublyLinkedList.cpp | 111 --------------------- 1 file changed, 111 deletions(-) delete mode 100644 LinkedList/C++/ReverseDoublyLinkedList.cpp diff --git a/LinkedList/C++/ReverseDoublyLinkedList.cpp b/LinkedList/C++/ReverseDoublyLinkedList.cpp deleted file mode 100644 index 3dc3abe9d..000000000 --- a/LinkedList/C++/ReverseDoublyLinkedList.cpp +++ /dev/null @@ -1,111 +0,0 @@ -// Reverse of doubly linked list in C++ -// author: @divyanshugit -#include - -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::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::max(), '\n'); - - for (int i = 0; i < llist_count; i++) { - int llist_item; - cin >> llist_item; - cin.ignore(numeric_limits::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; -}