Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 8df7a88

Browse files
authored
fix: remove memory leak from circular_queue_using_linked_list.cpp (TheAlgorithms#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

Lines changed: 36 additions & 20 deletions
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)

AltStyle によって変換されたページ (->オリジナル) /