Mình viết lệnh xóa Node trùng kiểu dữ liệu trong DSLK, ở đây kiểu dữ liệu của mình là số nguyên dương.
Ý tưởng của mình là cho NODE p chạy từ đầu dãy đến cuối dãy, NODE r chạy từ NODE p->Next đến cuối dãy, nếu (p->Data==r->Data) thì xóa NODE r.
void DeleteBy(LIST &L, int pos)
{
int count = 0;
NODE p = L.pHead, r = L.pHead;
while (count < pos - 2)
{
p = p->Next;
count++;
}
r = p->Next;
p->Next = r->Next;
free(r);
}
void DeleteSameNode(LIST &L)
{
NODE p = L.pHead, r, t;
int pos, count = 0;
while (p != NULL)
{
count++;
pos = count + 1;
for (r = p->Next; r != NULL;r=r->Next)
{
if (p->Data == r->Data)
{
t = r;
DeleteBy(L, pos);
r = t;
}
pos++;
}
p = p->Next;
}
}
Sau khi Debug thì mình phát hiện ra lỗi ở hàm DeleteSameNode. Khi mình xóa NODE r thì cả NODE t cũng bị xóa theo, mình không hiểu tại sao đoạn chương trình lại thực hiện như vậy khi mình đã tách NODE r và NODE t ra thành 2 NODE riêng biệt.
Mọi người giúp mình fix lỗi với. Cảm ơn ^^



83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?