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 thêm một phần tử vào đầu danh sách:
struct S1 {
int info;
struct S1 * next;
}* head;

A.
p->next=head; head=p;
B.
p->next=head; head->p; head=p->next;
C.
head->next=p; p=head;
D.
Không có câu nào đúng
Trả lời:

Đáp án đúng: A


Để thêm một phần tử mới vào đầu danh sách liên kết đơn, chúng ta cần thực hiện các bước sau: 1. **Tạo một nút mới:** Giả sử nút mới được tạo và địa chỉ của nó được lưu trong con trỏ `p`. 2. **Liên kết nút mới vào danh sách hiện tại:** `p->next = head;` (Gán con trỏ `next` của nút mới `p` trỏ đến phần tử đầu tiên hiện tại của danh sách, tức là `head`). 3. **Cập nhật `head`:** `head = p;` (Gán `head` trỏ đến nút mới `p`, làm cho nút mới trở thành phần tử đầu tiên của danh sách). Vậy, phương án A (`p->next=head; head=p;`) là đúng. Các phương án khác sai vì: * **Phương án B:** `head->p` không hợp lệ vì `head` là con trỏ đến một cấu trúc, không có trường `p`. Ngoài ra, gán `head = p->next;` sẽ làm mất nút mới vừa thêm. * **Phương án C:** `head->next=p;` sẽ thêm nút mới vào *sau* `head`, không phải vào đầu danh sách. `p=head;` sẽ làm mất địa chỉ của nút mới. * **Phương án D:** Vì phương án A đúng nên phương án này sai.

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