Xóa phần tử đứng sau phần tử cho trước SV tự vẽ hình minh họa ...
Trang 1CÁC THAO TÁC TRÊN DANH SÁCH LIÊN KẾT ĐƠN C++
- Cài đặt:
void XoaDau(LIST &l)
{
if(l.pHead!=NULL)
{
NODE *pXoa=l.pHead;
l.pHead=l.pHead->pNext;
delete pXoa;
if(l.pHead==NULL)//Trường hợp danh sách có 1 phần tử l.pTail=NULL;
}
}
6.2 Xóa phần tử cuối
(SV tự vẽ hình minh họa)
Trang 2
Ngược lại:
B1: pTruoc là con trỏ đứng trước con trỏ cuối của danh sách B2: Cho pTruoc trỏ kế tiếp tới NULL
B3: Xóa con trỏ cuối
B4: Gán con trỏ cuối là pTruoc
- Cài đặt:
void XoaCuoi(LIST &l)
{
if(l.pHead!=NULL)
{
if(l.pHead==l.pTail)
XoaDau(l);
else
{
NODE *pTruoc=TimNodeTruocp(l, l.pTail);
pTruoc->pNext=NULL;
delete l.pTail;
l.pTail=pTruoc;
}
}
}
6.3 Xóa phần tử p cho trước
(SV tự vẽ hình minh họa)
Trang 3
- Đầu vào: DSLK đơn l, node p cần xóa
- Kết quả: DSLK đơn l sau khi xóa p
- Giải thuật:
*Trường hợp 1: Nếu p là con trỏ đầu thì xóa đầu
*Trường hợp 2: Nếu p là con trỏ cuối thì xóa cuối
Ngược lại:
B1: pTruoc là con trỏ đứng trước p
pSau là con trỏ đứng sau p
B2: Xóa p
B3: Cho pTruoc trỏ vào pSau
- Cài đặt:
void Xoap(LIST &l, NODE *p)
{
if(p==l.pHead)
XoaDau(l);
else if(p==l.pTail)
XoaCuoi(l);
else
{
NODE *pTruoc=TimNodeTruocp(l, p);
NODE *pSau = p->pNext;
delete p;
pTruoc->pNext = pSau;
}
}
Trang 4
- Đầu vào: DSLK đơn l, node p để xác định node cần xóa - Kết quả: DSLK đơn l sau khi xóa trước phần tử p - Giải thuật: *Trường hợp 1: Nếu p là con trỏ đầu thì kết thúc *Trường hợp 2: (p khác con trỏ đầu) B1: pTruoc là con trỏ đứng trước p B2: Xóa pTruoc - Cài đặt: void XoaTruocp(LIST &l, NODE *p) { if(p!=l.pHead) { Trang NODE *pTruoc=TimNodeTruocp(l, p); Xoap(pTruoc); } } 6.5 Xóa phần tử đứng sau phần tử cho trước (SV tự vẽ hình minh họa)
Trang 5
- Đầu vào: DSLK đơn l, node p để xác định node cần xóa - Kết quả: DSLK đơn l sau khi xóa phần tử sau p - Giải thuật: *Trường hợp 1: Nếu p là con trỏ cuối thì kết thúc *Trường hợp 2: (p khác con trỏ cuối) B1: pSau là con trỏ đứng sau p B2: Xóa pSau - Cài đặt: void XoaSaup(LIST &l, NODE *p) { if(p!=l.pTail) { NODE *pSau=p->pNext; Xoap(pSau); } } 6.6.Hủy toàn bộ danh sách (SV tự vẽ hình minh họa)
Trang 6
- Cài đặt:
void Huy(LIST &l)
{
while(l.pHead)
XoaDau(l);
}