File tree Expand file tree Collapse file tree 1 file changed +117
-0
lines changed
Data Structures/Linked Lists/Circular Doubly Linked Lists Expand file tree Collapse file tree 1 file changed +117
-0
lines changed Original file line number Diff line number Diff line change 1+ /*
2+
3+ This is a Circular Doubly Linked List program which deletes a Node at the end of the Linked Lists.
4+ Since, it is a Ciruclar 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 dcll_node {
22+ public:
23+ dcll_node* prev;
24+ int data;
25+ dcll_node* next;
26+ };
27+
28+ void createDCLL (dcll_node* &head) {
29+
30+ dcll_node* temp = head;
31+
32+ int choice;
33+
34+ do {
35+
36+ int data;
37+
38+ cout << " Enter Data : " ;
39+ cin >> data;
40+
41+ dcll_node* newNode = new dcll_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+ head->next = head;
50+ head->prev = head;
51+ } else {
52+ temp->next = newNode;
53+ newNode->prev = temp;
54+ temp = newNode;
55+ newNode->next = head;
56+ head->prev = newNode;
57+ }
58+
59+ cout << " Do you want to continue? (1/0) : " ;
60+ cin >> choice;
61+
62+ } while (choice == 1 );
63+
64+ }
65+
66+ void reverse (dcll_node* &head) {
67+
68+ if (head == NULL || head->next == head)
69+ return ;
70+
71+ head->prev ->next = NULL ;
72+
73+ dcll_node *p = NULL , *q = head , *r = head->next ;
74+ while (r != NULL ) {
75+ q->next = p;
76+ q->prev = r;
77+ p = q;
78+ q = r;
79+ r = r->next ;
80+ }
81+
82+ q->next = p;
83+ q->prev = head;
84+ head->next = q;
85+ head = q;
86+ }
87+
88+ void display (dcll_node* head) {
89+
90+ dcll_node* temp = head;
91+
92+ cout << " The elements are : " ;
93+ do {
94+
95+ cout << temp->data << " " ;
96+ temp = temp->next ;
97+
98+ } while (temp != head);
99+
100+ cout << endl;
101+ }
102+
103+ int main () {
104+
105+ dcll_node* head = NULL ;
106+ createDCLL (head);
107+
108+ cout << " Before Reversing : " << endl;
109+ display (head);
110+
111+ reverse (head);
112+
113+ cout << " After Reversing : " << endl;
114+ display (head);
115+
116+ return 0 ;
117+ }
You can’t perform that action at this time.
0 commit comments