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:

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 thêm một phần tử vào đầu danh sách?

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


Đề bài yêu cầu thêm một phần tử vào **đầu** danh sách liên kết đơn.

Để thêm một phần tử vào đầu danh sách, ta cần thực hiện các bước sau:

  1. Tạo một node mới (trong đoạn code, node mới được trỏ bởi con trỏ p).
  2. Cho con trỏ next của node mới (p->next) trỏ đến node đầu tiên hiện tại của danh sách (địa chỉ được lưu trong head).
  3. Cập nhật head để nó trỏ đến node mới (p), biến node mới thành node đầu tiên của danh sách.

Phân tích các đáp án:

  • Đáp án A: p->next = head; head = p;
    • Câu lệnh p->next = head; gán địa chỉ của phần tử đầu tiên hiện tại (được trỏ bởi head) vào trường next của phần tử mới (được trỏ bởi p). Điều này đảm bảo phần tử mới sẽ liên kết đến phần còn lại của danh sách.
    • Câu lệnh head = p; gán địa chỉ của phần tử mới (p) cho head. Điều này làm cho phần tử mới trở thành phần tử đầu tiên của danh sách.

    => Đáp án A đúng.

  • Đáp án B: p->next = head; head->p; head = p->next;
    • p->next = head; gán địa chỉ của phần tử đầu tiên hiện tại cho trường next của node mới.
    • head->p; Câu lệnh này không hợp lệ về mặt cú pháp vì không có trường 'p' trong struct S1, và hơn nữa cũng không thực hiện chức năng gì có ý nghĩa trong việc thêm phần tử vào danh sách.
    • head = p->next; gán địa chỉ mà p trỏ tới (chính là địa chỉ của phần tử đầu tiên trước đó) cho head. Như vậy head vẫn trỏ vào phần tử đầu tiên ban đầu, và phần tử mới không được thêm vào đầu danh sách.

    => Đáp án B sai.

  • Đáp án C: head->next = p; p = head;
    • Câu lệnh head->next = p; gán địa chỉ của phần tử mới (p) vào trường next của phần tử đầu tiên hiện tại (được trỏ bởi head). Điều này thêm phần tử mới vào *sau* phần tử đầu tiên, chứ không phải vào đầu danh sách.
    • Câu lệnh p = head; gán địa chỉ của phần tử đầu tiên (head) cho p, làm cho p trỏ đến phần tử đầu tiên ban đầu. Điều này không thay đổi cấu trúc danh sách.

    => Đáp án C sai.

  • Đáp án D: Không có câu nào đúng.

Vì đáp án A đúng, nên đáp án D sai.

Câu hỏi liên quan