双向循环链表的基本操作代码
时间: 2023-12-18 17:26:06 浏览: 45
好的,以下是双向循环链表的基本操作代码:
```c++
#include <iostream>
using namespace std;
struct Node {
int val;
Node* prev;
Node* next;
Node(int v) : val(v), prev(nullptr), next(nullptr) {}
};
class DoublyLinkedList {
private:
Node* head;
Node* tail;
public:
DoublyLinkedList() : head(nullptr), tail(nullptr) {}
void insertFront(int val) {
Node* newNode = new Node(val);
if (!head) {
head = newNode;
tail = newNode;
} else {
newNode->next = head;
head->prev = newNode;
head = newNode;
}
tail->next = head;
head->prev = tail;
}
void insertBack(int val) {
Node* newNode = new Node(val);
if (!tail) {
head = newNode;
tail = newNode;
} else {
newNode->prev = tail;
tail->next = newNode;
tail = newNode;
}
tail->next = head;
head->prev = tail;
}
void deleteFront() {
if (!head) return;
if (head == tail) {
delete head;
head = nullptr;
tail = nullptr;
} else {
Node* temp = head;
head = head->next;
head->prev = tail;
tail->next = head;
delete temp;
}
}
void deleteBack() {
if (!tail) return;
if (head == tail) {
delete tail;
head = nullptr; tail = nullptr;
} else {
Node* temp = tail;
tail = tail->prev;
tail->next = head;
head->prev = tail;
delete temp;
}
}
void printList() {
if (!head) return;
Node* cur = head;
do {
cout << cur->val << " ";
cur = cur->next;
} while (cur != head);
cout << endl;
}
};
int main() {
DoublyLinkedList dll;
dll.insertFront(1);
dll.insertFront(2);
dll.insertBack(3);
dll.insertBack(4);
dll.printList(); // 2 1 3 4
dll.deleteFront();
dll.deleteBack();
dll.printList(); // 1 3
return 0;
}
```