Skip to content

Commit 8df7a88

Browse files
authored
fix: remove memory leak from circular_queue_using_linked_list.cpp (#2731)
1 parent 920b6d4 commit 8df7a88

File tree

1 file changed

+36
-20
lines changed

1 file changed

+36
-20
lines changed

data_structures/circular_queue_using_linked_list.cpp

+36-20
Original file line numberDiff line numberDiff line change
@@ -5,49 +5,65 @@ struct node {
55
struct node* next;
66
};
77
class Queue {
8-
node* front=nullptr;
9-
node* rear=nullptr;
8+
node* front = nullptr;
9+
node* rear = nullptr;
1010

11-
public:
12-
Queue() = default;
11+
Queue(const Queue&) = delete;
12+
Queue& operator=(const Queue&) = delete;
13+
14+
public:
15+
Queue() = default;
16+
~Queue() {
17+
while (front) {
18+
dequeue();
19+
}
20+
}
21+
22+
private:
1323
void createNode(int val) {
1424
auto* nn = new node;
1525
nn->data = val;
1626
nn->next = nullptr;
1727
front = nn;
1828
rear = nn;
1929
}
30+
31+
public:
2032
void enqueue(int val) {
2133
if (front == nullptr || rear == nullptr) {
2234
createNode(val);
23-
}
24-
else {
25-
node* nn;
26-
nn = new node;
35+
} else {
36+
node* nn = new node;
2737
nn->data = val;
2838
rear->next = nn;
2939
nn->next = front;
3040
rear = nn;
3141
}
3242
}
3343
void dequeue() {
34-
node* n;
35-
n = front;
36-
if (n) {
44+
if (front == nullptr) {
45+
return;
46+
}
47+
const node* const n = front;
48+
if (front == rear) {
49+
front = nullptr;
50+
rear = nullptr;
51+
} else {
3752
front = front->next;
38-
delete n;
53+
rear->next = front;
3954
}
55+
delete n;
4056
}
4157
void traverse() {
42-
node* ptr;
43-
ptr = front;
44-
if (ptr) {
45-
do {
46-
std::cout << ptr->data << " ";
47-
ptr = ptr->next;
48-
} while (ptr != rear->next);
49-
std::cout << front->data << std::endl;
58+
if (front == nullptr) {
59+
return;
5060
}
61+
const node* ptr = front;
62+
do {
63+
std::cout << ptr->data << ' ';
64+
ptr = ptr->next;
65+
} while (ptr != front);
66+
std::cout << '\n';
5167
}
5268
};
5369
int main(void) {

0 commit comments

Comments
 (0)