File tree 1 file changed +75
-0
lines changed
1 file changed +75
-0
lines changed Original file line number Diff line number Diff line change
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
+ }
You can’t perform that action at this time.
0 commit comments