JavaScript is required

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. 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:
struct S1 {
int info;
struct S1 * next;
}* head;

A.
head->next=head;
B.
head=head->next;
C.
head=head->next->next;
D.
B và C đều đúng
Trả lời:

Đáp án đúng: B


Phương án A sai vì gán `head->next` bằng `head` sẽ tạo một vòng lặp, khiến phần tử đầu tiên trỏ lại chính nó, chứ không xóa nó khỏi danh sách. Phương án B đúng vì `head = head->next;` sẽ gán địa chỉ của phần tử thứ hai cho con trỏ `head`. Như vậy, phần tử đầu tiên sẽ không còn được trỏ tới bởi `head` và do đó bị loại khỏi danh sách (nếu không có con trỏ nào khác trỏ tới nó). Phương án C sai vì `head = head->next->next;` sẽ gán địa chỉ của phần tử thứ ba cho con trỏ `head`. Như vậy, hai phần tử đầu tiên sẽ không còn được trỏ tới bởi `head` và do đó bị loại khỏi danh sách (nếu không có con trỏ nào khác trỏ tới chúng). Tuy nhiên, câu hỏi yêu cầu xóa phần tử đầu tiên, nên phương án này không phù hợp. Phương án D sai vì chỉ có B đúng. Vậy đáp án đúng là B.

Tổng hợp 600+ câu hỏi trắc nghiệm lập trình C có đáp án đầy đủ nhằm giúp các bạn dễ dàng ôn tập lại toàn bộ các kiến thức.


50 câu hỏi 60 phút

Câu hỏi liên quan