Xóa danh sách liên kết đơn

Cách xóa 1 Node trong danh sách liên kết đơn

programming
c
linked-list
14520054 (BaoLe) May 4, 2020, 2:05am #1

Giả sử ta có một danh sách liên kết đơn với thành phần dữ liệu của một nút là số nguyên và dữ liệu của các Node trong danh sách liên kết là đôi một khác nhau. Hàm Xoa của mình dùng để xóa Node có dữ liệu là số nguyên x.

void Xoa(Node* &pHead, int x){ Node* tam = pHead; while(tam != NULL){ // xoa Node dau tien. if(tam == pHead && tam -> data == x){ Node *tam1 = tam; pHead = tam -> next; free(tam1); return; } // xoa Node cuoi cung. else if(tam -> data == x && tam -> next == NULL){ Node* tam1 = tam; tam = NULL; free(tam1); return; } // xoa Node bat ky nhung khong phai la cuoi cung va dau tien. else if(tam -> data == x){ Node* tam1 = tam; tam = tam -> next; free(tam1); return; } tam = tam -> next; } }

Mình viết thế này đã được chưa vậy. Nhờ các bạn trong diễn đàn cho ý kiến với.

nguyenchiemminhvu (...) March 7, 2015, 3:05am #2
Xóa danh sách liên kết đơn
14520054:
// xoa Node bat ky nhung khong phai la cuoi cung va dau tien. else if(tam -> data == x){ Node* tam1 = tam; tam = tam -> next; free(tam1); return; } tam = tam -> next; } }

Bạn thử xóa 1 node ở giữa xong cho in list ra xem kết quả có vấn đề gì không.

2 Likes
soldier_2510 (Gr4y) April 9, 2019, 10:30am #3

cái lệnh free(tam1); dùng để làm gì đó các bro

Summoner_s_Rift (Summoner's Rift) April 10, 2019, 2:16am #4

giải phóng vùng nhớ C nó phải giải phóng thủ công : từ khóa leak memory