Skip to content

Commit 6fd65f5

Browse files
authored
Merge pull request #144 from kiruba-r11/feature-1
Added Recursive Reverse in Doubly Linked Lists
2 parents ee36115 + 06023df commit 6fd65f5

File tree

1 file changed

+102
-0
lines changed

1 file changed

+102
-0
lines changed
Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
/*
2+
3+
This is a Doubly Linked List program which reverses the Linked List byt reversing its pointer links.
4+
Since, it is a Doubly Linked List, both the forward and backward traversal is also possible.
5+
6+
*/
7+
8+
#include <iostream>
9+
10+
using namespace std;
11+
12+
/*
13+
14+
Node definition:
15+
1. Pointer to previous node.
16+
2. Integer Data
17+
3. Pointer to next node.
18+
19+
*/
20+
21+
class dll_node {
22+
public:
23+
dll_node* prev;
24+
int data;
25+
dll_node* next;
26+
};
27+
28+
void createDLL(dll_node* &head) {
29+
30+
int choice;
31+
32+
dll_node* temp = head;
33+
34+
do {
35+
36+
int data;
37+
38+
cout << "Enter Data : ";
39+
cin >> data;
40+
41+
dll_node* newNode = new dll_node();
42+
newNode->data = data;
43+
newNode->prev = NULL;
44+
newNode->next = NULL;
45+
46+
if(head == NULL) {
47+
head = newNode;
48+
temp = head;
49+
} else {
50+
temp->next = newNode;
51+
newNode->prev = temp;
52+
temp = newNode;
53+
}
54+
55+
cout << "Do you want to continue? (1/0) : ";
56+
cin >> choice;
57+
58+
} while(choice == 1);
59+
60+
61+
}
62+
63+
dll_node* recursive_reverse(dll_node* head) {
64+
65+
if(head == NULL || head->next == NULL)
66+
return head;
67+
68+
dll_node* temp = head->next;
69+
temp->prev = NULL;
70+
71+
dll_node* newHead = recursive_reverse(temp);
72+
temp->next = head;
73+
head->prev = temp;
74+
head->next = NULL;
75+
return newHead;
76+
}
77+
78+
void display(dll_node* head) {
79+
cout << "The elements are : ";
80+
while(head != NULL) {
81+
cout << head->data << " ";
82+
head = head->next;
83+
}
84+
cout << endl;
85+
}
86+
87+
int main() {
88+
89+
dll_node* head = NULL;
90+
91+
createDLL(head);
92+
93+
cout << "Before reversing : " << endl;
94+
display(head);
95+
96+
head = recursive_reverse(head);
97+
98+
cout << "After reversing : " << endl;
99+
display(head);
100+
101+
return 0;
102+
}

0 commit comments

Comments
 (0)