Professional Documents
Culture Documents
DANH SÁCH LIÊN KẾT KÉP 1
DANH SÁCH LIÊN KẾT KÉP 1
Ví dụ: Danh sách liên kết kép lưu các giá trị số nguyên: {5, 9, 0, 11}
Cấu trúc của một node trong danh sách liên kết kép
Ví dụ: node được khởi tạo lưu Code C++ về cấu trúc của 1 node
giá trị số nguyên 9
Cấu trúc của danh sách liên kết kép:
pHea pTail
d
Thêm 1 node vào đầu danh sách:
0xb80 0xb82
3. pTail = Q
void AddTail(LIST &L, NODE *p){
if (L.pTail == NULL){
L.pHead = p;
L.pTail = p;
}
else{
L.pTail->pNext = p;
p->pPrev = L.pTail;
p->pNext = NULL;
L.pTail = p;
}
}
0xb83
pHea pTail
d NULL 11 NULL
0xb80 0xb82
Q
Ví dụ: Thêm node Q có
giá trị 11 vào giữa danh
sách (sau node P)
Thêm 1 node vào giữa danh sách:
P Q P -> pNext
0xb83
NULL 11 NULL
Xóa 1 node: Q
1. pHead = pHead->pNext
0xb80 0xb81 0xb82
2. Q->pNext = NULL
0xb8 0xb8 0xb8 0xb8
NULL 5 NULL NULL 9 0 NULL
3. pHead->pPrev = NULL 1 0 2 1
4. delete Q
Q
B4: Xóa Q
Xóa 1 node: Trường hợp Q là pTail
1. pTail = pTail->pPrev
0xb80 0xb81 0xb82
2. pTail->pNext = NULL
0xb8 0xb8 0xb8 0xb8
3. Q->pPrev = NULL NULL 5
1 0
9 NULL
2
NULL
1
0 NULL
4. delete Q
Q
B4: Xóa Q
Xóa 1 node C++: Trường hợp Q ở giữa danh sách, sau P
1. P->pNext = Q->pNext
B5: Xóa Q
Code C++ xóa 1 node p
void deleteNODEp(NODE *p, LIST &L){
if (p == NULL)
return;
if (L.pHead == L.pTail && p == L.pHead){
delete p;
L.pHead = NULL;
L.pTail = NULL;
p = NULL;
}
else if (p == L.pHead){
L.pHead = L.pHead->pNext;
L.pHead->pPrev = NULL;
p->pNext = NULL;
delete p;
p = NULL;
}