From 159cd6e6a18032585a2cb472c895d303e412db5c Mon Sep 17 00:00:00 2001 From: mandliya Date: Wed, 9 Sep 2015 00:17:04 -0400 Subject: [PATCH] Day 24 reverse linkedlist iterative,recursive --- .../reverseLinkedListIterAndRecurse.cpp | 75 +++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 linked_list_problems/reverseLinkedListIterAndRecurse.cpp diff --git a/linked_list_problems/reverseLinkedListIterAndRecurse.cpp b/linked_list_problems/reverseLinkedListIterAndRecurse.cpp new file mode 100644 index 0000000..4d94393 --- /dev/null +++ b/linked_list_problems/reverseLinkedListIterAndRecurse.cpp @@ -0,0 +1,75 @@ +#include + +struct Node { + int data; + Node * next; + Node( int d ) : data{ d }, next{ nullptr } { } +}; + +void push( Node * & head, int data ) { + Node *newNode = new Node(data); + if ( head == nullptr ) { + head = newNode; + } else { + Node *curr = head; + while( curr->next != nullptr ) { + curr = curr->next; + } + curr->next = newNode; + } +} + +void printList( Node * head ) { + while( head ) { + std::cout << head->data << "-->"; + head = head->next; + } + std::cout << "NULL" << std::endl; +} + +void reverseIter( Node * & head ) { + //length of list is less than 2 + if ( head == nullptr || ( head != nullptr && head->next == nullptr )) { + return; + } + Node *newHead = nullptr; + Node *curr = head; + Node *prev = nullptr; + while( curr != nullptr ) { + prev = curr; + curr = curr->next; + prev->next = newHead; + newHead = prev; + } + head = newHead; +} + +void reverseRecur( Node * & head ) { + if ( head == nullptr || ( head != nullptr && head->next == nullptr ) ) { + return; + } + Node * first = head; + Node * rest = head->next; + reverseIter( rest ); + first->next->next = first; + first->next = nullptr; + head = rest; +} + +int main() { + Node *head = nullptr; + push( head, 1 ); + push( head, 2 ); + push( head, 3 ); + push( head, 4 ); + push( head, 5 ); + std::cout << "Before Reversing Linkedlist: "; + printList( head ); + reverseIter( head ); + std::cout << "After Reversing Linkedlist once: "; + printList( head ); + reverseRecur( head ); + std::cout << "After Reversing Linkedlist twice: "; + printList( head ); + return 0; +}