Skip to content

Commit 159cd6e

Browse files
committed
Day 24 reverse linkedlist iterative,recursive
1 parent 046982e commit 159cd6e

File tree

1 file changed

+75
-0
lines changed

1 file changed

+75
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
#include <iostream>
2+
3+
struct Node {
4+
int data;
5+
Node * next;
6+
Node( int d ) : data{ d }, next{ nullptr } { }
7+
};
8+
9+
void push( Node * & head, int data ) {
10+
Node *newNode = new Node(data);
11+
if ( head == nullptr ) {
12+
head = newNode;
13+
} else {
14+
Node *curr = head;
15+
while( curr->next != nullptr ) {
16+
curr = curr->next;
17+
}
18+
curr->next = newNode;
19+
}
20+
}
21+
22+
void printList( Node * head ) {
23+
while( head ) {
24+
std::cout << head->data << "-->";
25+
head = head->next;
26+
}
27+
std::cout << "NULL" << std::endl;
28+
}
29+
30+
void reverseIter( Node * & head ) {
31+
//length of list is less than 2
32+
if ( head == nullptr || ( head != nullptr && head->next == nullptr )) {
33+
return;
34+
}
35+
Node *newHead = nullptr;
36+
Node *curr = head;
37+
Node *prev = nullptr;
38+
while( curr != nullptr ) {
39+
prev = curr;
40+
curr = curr->next;
41+
prev->next = newHead;
42+
newHead = prev;
43+
}
44+
head = newHead;
45+
}
46+
47+
void reverseRecur( Node * & head ) {
48+
if ( head == nullptr || ( head != nullptr && head->next == nullptr ) ) {
49+
return;
50+
}
51+
Node * first = head;
52+
Node * rest = head->next;
53+
reverseIter( rest );
54+
first->next->next = first;
55+
first->next = nullptr;
56+
head = rest;
57+
}
58+
59+
int main() {
60+
Node *head = nullptr;
61+
push( head, 1 );
62+
push( head, 2 );
63+
push( head, 3 );
64+
push( head, 4 );
65+
push( head, 5 );
66+
std::cout << "Before Reversing Linkedlist: ";
67+
printList( head );
68+
reverseIter( head );
69+
std::cout << "After Reversing Linkedlist once: ";
70+
printList( head );
71+
reverseRecur( head );
72+
std::cout << "After Reversing Linkedlist twice: ";
73+
printList( head );
74+
return 0;
75+
}

0 commit comments

Comments
 (0)