Cho một danh sách móc nối với các phần tử trong danh sách có kiểu S1 được định nghĩa như sau:
struct S1 {int info; struct S1 *next;} *head;
Biết con trỏ “*head” lưu địa chỉ của phần tử đầu tiên trong danh sách. Nhóm câu lệnh nào sau đây xóa phần tử đầu tiên ra khỏi danh sách?
Trả lời:
Đáp án đúng: B
Đề bài cho một danh sách liên kết đơn, với head
là con trỏ trỏ đến phần tử đầu tiên. Để xóa phần tử đầu tiên, ta cần cập nhật head
để nó trỏ đến phần tử thứ hai. Điều này có thể thực hiện bằng cách gán head
bằng head->next
.
- Phương án A:
head->next = head;
Gán con trỏnext
của phần tử đầu tiên trỏ lại chính nó, không xóa phần tử đầu tiên khỏi danh sách. - Phương án B:
head = head->next;
Gánhead
bằng địa chỉ của phần tử thứ hai, do đó phần tử đầu tiên bị loại khỏi danh sách (không còn con trỏ nào trỏ đến nó). Đây là phương án đúng. - Phương án C:
head = head->next->next;
Gánhead
bằng địa chỉ của phần tử thứ ba (nếu có), làm mất phần tử đầu và phần tử thứ hai khỏi danh sách. - Phương án D: Loại vì chỉ ra 2 và 3, nhưng chỉ 2 đúng.
Vậy đáp án đúng là B.