You are on page 1of 6

Xóa một nút trong danh sách

Nếu như khi thêm chúng ta phải cấp phát bộ nhớ cho nút cần thêm thì với xóa
một nút chúng ta cần giải phóng bộ nhớ cho nút bị xóa bằng lệnh free().

Để xóa một nút trong danh sách có các khả năng:

- Xóa phần tử đầu danh sách

- Xóa phần tử sau phần tử xác định nào đó

- Xóa phần tử có giá trị k nào đó

*Xóa phần tử đầu danh sách

Các bước thực hiện nhau sau:

- Kiểm tra danh sách không rỗng

- Lưu phần tử đầu tạm thời vào p

- Chuyển phần tử đầu tới phần tử tiếp theo

- Xóa phần tử đầu đã được lưu tạm – xóa p

- Kiểm tra: Nếu danh sách chỉ có một phần tử, khi xóa phần tử đi thì phần tử
cuối cùng không c n

Hình. 4 Minh h ọa xóa ph ầ n t ử đầ u danh sách


Thủ tục cài đặt:

void RemoveHead ( LIST &Q )


{

Node *p; if (Q.Head !=

NULL)

p = Q.Head;

Q.Head = Q.Head -> Next;

free(p);

if ( Q.Head == NULL ) //Xóa hết mảng

Q.Tail = NULL;

*Xóa phần tử đứng sau phần tử q của danh sách

Các bước thực hiện:

- Nếu có phần tử q: Lưu phần tử đứng sau phần tử q – lưu vào p

- Nếu có phần tử p (q không phải là phần tử cuối)

- Tách phần tử p ra khỏi danh sách

- Giải phóng phần tử p


Hình. 5 Minh h ọ a xóa ph ầ n t ử đứ ng sau ph ầ n t ử q xác đị nh

*Thủ tục cài đặt void RemoveAfter ( LIST

&Q , Node *q )

{ Node *p; if (q !=

NULL)

p = q -> Next;

if (p != NULL)

if (p == Q.Tail)

q->Next = NULL;

Q.Tail = q;

}
q -> Next = p -> Next;

free(p);

} else RemoveHead(Q);

}
*Xóa phần tử có khóa bằng k

Thuật toán:
Bước 1: Tìm phần tử p có khóa k và phần tử q đứng trước nó

Bước 2:

Nếu tìm thấy phần tử có khóa là k thì hủy p ra khỏi xâu tương tự hủy phần
tử sau q;

Ngược lại thông báo không có k; Thủ


tục cài đặt như sau:

int RemoveNode( LIST &Q, Data k )


{
Node *p = Q.Head, *q = NULL;
while( p != NULL)
{ if (p->Infor == k) break; q = p;

p = p->Next;
} if (p == NULL) return 0; //Không tìm thấy k
if (q != NULL)
{ if(p == Q.Tail) Q.Tail = q; q-
>Next = p->Next; free( p);

}
else //p là phần tử đầu xâu
{
Q.Head = p -> Next; if ( Q.Head == NULL)
Q.Tail = NULL;

} return
1; }

You might also like