Circular Doubly Linked List: Danh sách liên kết đôi vòng tròn. Con trỏ next của node cuối trỏ về node đầu, con trỏ prev của node đầu trỏ về node cuối. Duyệt được 2 chiều, vòng lặp vô tận.
Cấu trúc Node
class Node {
constructor(data) {
this.data = data;
this.next = null;
this.prev = null;
}
}
Đặc điểm Circular Doubly Linked List
head.prev = tailtail.next = head- Không có
nullở next/prev của head/tail. - Duyệt từ bất kỳ node nào đều có thể đi hết vòng.
Thao tác cơ bản
Insert
- Cập nhật
next/prevcủa node mới, node lân cận, vàhead/tailnếu cần. - Ví dụ insert vào cuối:
newNode.prev = tail; newNode.next = head; tail.next = newNode; head.prev = newNode; tail = newNode;
Delete
- Cập nhật
next/prevcủa node lân cận bỏ qua node bị xóa. - Nếu xóa head/tail → cập nhật head/tail mới.
- Nếu list chỉ 1 node → head = tail = null (hoặc self-loop).
Ứng dụng
- Round-robin scheduling (CPU task queue).
- Playlist phát lặp (music player).
- Game loop (entity management).
- Undo/Redo buffer với kích thước cố định (ring buffer).

Lưu ý: JS không có pointer, dùng reference object. GC tự dọn dẹp khi không còn reference.