You are on page 1of 19

Võ Tiến

Cấu trúc dữ liệu và giải thuật


Giữa kì
Tổng hợp câu hỏi trắc nghiệm

nhóm thảo luận CSE


https://www.facebook.com/groups/211867931379013

Tp. Hồ Chí Minh, Tháng 10/2023

https://www.facebook.com/groups/211867931379013 Trang 1/19


Nhóm thảo luận CSE
Võ Tiến

Mục lục
1 Trắc nghiệm Danh sách liên kết 3

2 Đáp án trắc nghiệm Danh sách liên kết 10

https://www.facebook.com/groups/211867931379013 Trang 2/19


Nhóm thảo luận CSE
Võ Tiến

GIỮA KÌ Danh sách liên kết


nhóm thảo luận CSE
https://www.facebook.com/groups/211867931379013
1 Trắc nghiệm Danh sách liên kết
1. [2.1] Phát biểu nào sau đây là đúng khi nói về một Node trong danh sách liên kết?.
A. Node có thể có nhiều trường dữ liệu
B. Node phải có 1 trường dữ liệu thuộc kiểu số nguyên.
C. Node phải có 1 trường dữ liệu thuộc kiểu T.
D. Node có thể không có liên kết đến Node khác.

2. [2.2] Xét một Danh sách liên kết đơn được biểu diễn bởi 2 con trỏ head, tail, lần lượt chứa
địa chỉ của Node đầu tiên và Node cuối cùng trong Danh sách liên kết. Giả sử hiện tại Danh
sách chỉ có 1 phần tử. Phát biểu nào sau đây là đúng sau khi xoá 1 Node ở vị trí cuối cùng?
A. head = NULL
B. tail = NULL
C. head = NULL; tail = NULL; count = 0
D. head = NULL; tail = NULL;

3. [2.3] Cho một danh sách liên kết đôi rỗng. Lần lượt thêm các số nguyên sau vào đầu danh
sách liên kết đôi: 20, 22, 1, 3, 5, 7. Sau đó, lần lượt thêm các số nguyên sau vào cuối danh
sách liên kết đôi: 20, 21, 22, 1, 3, 5, 7. Cho 2 con trỏ head, tail lần lượt chứa địa chỉ của
Node đầu tiên và Node cuối cùng. Cho con trỏ temp chứa địa chỉ của Node đang chứa số
21. Cách làm nào sau đây cho ta đi đến vị trí của Node chứa số 1 (bất kì số 1 nào trong hai
số 1) với số lần duyệt qua các Node khác ít nhất?
A. Từ head duyệt về phía cuối danh sách
B. Từ tail duyệt về phía đầu danh sách
C. Từ temp duyệt về phía cuối danh sách
D. Từ temp duyệt về phía đầu danh sách

4. [2.4] Phát biểu nào là đúng về điểm khác nhau của 1 Node trong Danh sách liên kết đôi so
với danh sách liên kết đơn?
A. Node có 2 trường dữ liệu.
B. Node có 2 liên kết.
C. Node có 2 con trỏ head1 và head2.
D. Node có 2 con trỏ tail1 và tail2.

5. [2.5] Phát biểu nào là đúng về điểm khác nhau của 1 Node trong Danh sách liên kết đôi so
với danh sách liên kết đơn?
A. Node có 2 trường dữ liệu.
B. Node có 2 liên kết.
C. Node có 2 con trỏ head1 và head2.
D. Node có 2 con trỏ tail1 và tail2.

https://www.facebook.com/groups/211867931379013 Trang 3/19


Nhóm thảo luận CSE
Võ Tiến

6. [2.6] Cho các phát biểu sau:

1. Hiện thực danh sách bằng mảng nên chỉ áp dụng cho các danh sách có ít phần tử.
2. Hiện thực danh sách bằng mảng nên chỉ áp dụng cho các danh sách thường xuyên truy
cập các phần tử.
3. Hiện thực danh sách bằng mảng phù hợp cho các danh sách thường xuyên diễn ra thao
tác thêm và xóa vì tính đơn giản trong hình thức lưu trữ.
4. Việc dịch chuyển một số lượng phần tử không bị tác động nhiều khi ta thêm phần tử
vào cuối danh sách.

Số phát biểu đúng là


A. 3.
B. 0.
C. 2.
D. 1.

7. [2.7] Trong danh sách liên kết đôi vòng (Circularly double linked list), khi thêm xóa 1 phân
cần cập nhật bao nhiêu con trẻ?
A. 1.
B. 2.
C. 3.
D. 4.

8. [2.8] Cho trước con trỏ quản lý node X trong 1 danh sách liên kết đơn chứa nhiều hơn 1
node. Chỉ dùng duy nhất con trỏ này thì có thể xóa node X ra khỏi danh sách không (không
được dùng con trỏ head)
A. Không thể.
B. Được, nếu X không phải node cuối cùng.
C. Trong mọi trường hợp.
D. Được nếu node không phải node đàu tiên.

9. [2.9] Giả sử chúng ta hiện thực hàng đợi bằng Circularly linked list có phần tử đầu là Front
và phần tử cuối là Rear, con trò p được dùng để truy xuất các phần tử trong queue. Con
trỏ p nên trỏ đến node nào để các tác vụ cơ bản có thể thực hiện 1 cách nhanh chóng?
A. Không thể.
B. Node Rear.
C. Node Bất kì.
D. Node Front.

10. [2.10] Giả sử bạn có con trò head và tail để quản lý danh sách liên kết đơn. Thao tác nào
sau đây phụ thuộc và chiều dài danh sách?
A. Thêm 1 phần tử vào đầu danh sách.
B. Thêm 1 phần từ vào cuối danh sách.
C. Xóa 1 phần tử ở đầu danh sách.
D. Xóa 1 phần tử ở cuối danh sách.

https://www.facebook.com/groups/211867931379013 Trang 4/19


Nhóm thảo luận CSE
Võ Tiến

11. [2.11] Để thao tác nối (concate) 2 danh sách thành 1 danh sách có độ phức tạp O(1), thì 2
danh sách ban đầu được hiện thực dưới dạng:
A. Mảng.
B. Danh sách liên kết đơn.
C. Danh sách liên kết đôi vòng
D. Dánh sách liên kết đôi

12. [2.12] Dấu hiệu nào dưới đây cho biết danh sách liên kết đơn L là rỗng?
A. head->next=NULL.
B. head=NULL.
C. head->data=NULL.
D. head->data=0.

13. [2.13] Định nghĩa nào dưới đây là đúng với danh sách liên kết?
A. Danh sách liên kết là cấu trúc dữ liệu dạng cây.
B. Danh sách liên kết là cấu trúc dữ liệu tự định nghĩa
C. Danh sách liên kết là tập hợp các phần tử mà giữa chúng có một sự nối kết với
nhau thông qua vùng liên kết của chúng
D. Danh sách liên kết là tập hợp các phần tử đặt kề cận với nhau trong vùng nhớ

14. [2.14] tối đa Kích thước của một danh sách liên kết, cần được khai báo trước không.
A. Cần khai báo, điều kiện nhỏ hơn INT_MAX
B. Không Cần khai báo, điều kiện nhỏ hơn INT_MAX
C. Không cần khai báo vì kích thước vô hạn
D. cần khai báo một số hữu hạn

15. [2.15] Điều nào sau đây giống nhau về danh sách liên kết đơn và danh sách liên kết đôi?
A. Cả hai đều không thể truy cập dữ liệu ở một vị trí ngẫu nhiên trong thời gian
không đổi.
B. Cả hai đều có thể thêm một nút mới sau nút đã cho hoặc vào đầu danh sách trong
thời gian O(1).
C. Cả hai đều có thể xóa nút đầu tiên trong thời gian O(1).
D. Tất cả những điều trên

16. [2.16] Thuật toán sắp xếp nào sau đây được ưu tiên sử dụng để sắp xếp danh sách liên kết?
A. Merege Sort
B. Quick Sort
C. Insertion Sort
D. Sell Sort
Cho đoạn code sau làm 5 câu tiếp theo

https://www.facebook.com/groups/211867931379013 Trang 5/19


Nhóm thảo luận CSE
Võ Tiến

1 template <typename E> class Node


2 {
3 public:
4 virtual E& element() = 0; // return the node ’s value
5 virtual Node* next() = 0; // return the next node
6 virtual void setElement(const E& value) = 0; // set the node ’s value
7 virtual void setNext(Node* next) = 0; // set the next node
8 };
9

10 template <typename E>


11 int length ( Node<E> *head)
12 {
13 if(head) return 0;
14 else if(/*(a)*/ ) return 1;
15 return /*(b)*/ ;
16 }
17

18 template <typename E>


19 Node<E> * insertHead (Node<E> *head, Node<E> * newNode)
20 {
21 if(head == NULL) /*(c)*/ ;
22 else newNode->setNext(/*(d)*/ );
23 return /*(e)*/ ;
24 }

17. [2.17] điền code vào vị trí của (a)


A. head->next() == NULL
B. head->element() == 0
C. head.element() == 0
D. head == NULL

18. [2.18] điền code vào vị trí của (b)


A. length(head->next())
B. head->element()
C. 1 + length(head->next())
D. 1 + leng(thhead->next)

19. [2.19] điền code vào vị trí của (c)


A. head = newNode->next()
B. head = newNode
C. head->setNext(newNode)
D. newNode->setNext(head)

20. [2.20] điền code vào vị trí của (d)


A. head

https://www.facebook.com/groups/211867931379013 Trang 6/19


Nhóm thảo luận CSE
Võ Tiến

B. head->next()
C. head->setNext(newNode)
D. newNode->setNext(head)

21. [2.21] điền code vào vị trí của (e)


A. head
B. head->next()
C. newNode
D. newNode->next()
Câu hỏi cho 5 câu tiếp theo

1 template <typename E> class DoubleLinkedList; // forward declaration


2

3 template <typename E> class Node


4 {
5 private:
6 E element;
7 Node *next, *prev;
8 friend class DoubleLinkedList;
9 public:
10 Node(): next(nullptr), prev(nullptr) {}
11 };
12

13 template <typename E> class DoubleLinkedList


14 {
15 private:
16 Node<E> *head, *tail;
17 int size;
18 public:
19 DoubleLinkedList():size(0),head(NULL), tail(NULL) {}
20 void insert (Node<E>*, int);
21 };
22

23 template <typename E>


24 void DoubleLinkedList<E>::insert (Node<E> *newNode, int index)
25 {
26 if(size == 0) head = tail = newNode; // insert empty
27 else if(index <= 0) // insert head
28 {
29 newNode->next = head;
30 /*(a)*/
31 head = newNode;
32 }
33 else if(index >= size) // insert tail
34 {
35 /*(b)*/
36 newNode->prev = tail;
37 tail = newNode;

https://www.facebook.com/groups/211867931379013 Trang 7/19


Nhóm thảo luận CSE
Võ Tiến

38 }
39 else // insert mid
40 {
41 Node<E> temp = head;
42 while(/*Code*/ ){
43 /*(c)*/
44 index --;
45 temp = temp->next;
46 }
47 }
48 /*(d)*/
49 }

22. [2.22] điền code vào vị trí của (a)


A. head->prev = newNode;
B. head->next = newNode;
C. newNode->prev = NULL;
D. newNode->prev = head->next;

23. [2.23] điền code vào vị trí của (b)


A. tail->next = newNode;
B. tail->next = NULL;
C. tail->prev = newNode;
D. tail->prev = NULL;

24. [2.24] điền code vào vị trí của (c) nếu (Code) ta điền index! = 0
A. newNode->next = temp->next;
newNode->prev = temp;
temp->next = newNode;
newNode->next->prev = newNode;
B. newNode->next = temp;
newNode->prev = temp->prev;
temp->prev = newNode;
newNode->prev->next = newNode;
C. newNode->next = temp->next;
newNode->next->prev = temp->prev;
temp->prev = newNode;
newNode->prev->next = newNode;
D. Tất cả đều sai.

25. [2.25] điền code vào vị trí của (c) nếu (Code) ta điền index! = 1
A. newNode->next = temp->next;
newNode->prev = temp;
temp->next = newNode;
newNode->next->prev = newNode;

https://www.facebook.com/groups/211867931379013 Trang 8/19


Nhóm thảo luận CSE
Võ Tiến

B. newNode->next = temp;
newNode->prev = temp->prev;
temp->prev = newNode;
newNode->prev->next = newNode;
C. newNode->next = temp->next;
newNode->next->prev = temp->prev;
temp->prev = newNode;
newNode->prev->next = newNode;
D. Tất cả đều sai.

26. [2.26] điền code vào vị trí của (d)


A. head = newNode;
B. size ++;
C. size –;
D. size += 2;

https://www.facebook.com/groups/211867931379013 Trang 9/19


Nhóm thảo luận CSE
Võ Tiến

Solution Trắc Nghiệm Danh sách liên kết


2 Đáp án trắc nghiệm Danh sách liên kết
1. [2.1] Phát biểu nào sau đây là đúng khi nói về một Node trong danh sách liên kết?.
A. Node có thể có nhiều trường dữ liệu
B. Node phải có 1 trường dữ liệu thuộc kiểu số nguyên.
C. Node phải có 1 trường dữ liệu thuộc kiểu T.
D. Node có thể không có liên kết đến Node khác.

Solution: A vì trong node có thể có nhiều data1, data2 không nhất thiết chỉ có một
trường. B,C không bắt buộc, D node không liên kết thành đối tượng không thể thành
1 node trong danh sách liên kết.

2. [2.2] Xét một Danh sách liên kết đơn được biểu diễn bởi 2 con trỏ head, tail, lần lượt chứa
địa chỉ của Node đầu tiên và Node cuối cùng trong Danh sách liên kết. Giả sử hiện tại Danh
sách chỉ có 1 phần tử. Phát biểu nào sau đây là đúng sau khi xoá 1 Node ở vị trí cuối cùng?
A. head = NULL
B. tail = NULL
C. head = NULL; tail = NULL; count = 0
D. head = NULL; tail = NULL;

Solution: D, vì đề không cho count nên câu C sai. Câu A,B chưa cập nhật head/tail

3. [2.3] Cho một danh sách liên kết đôi rỗng. Lần lượt thêm các số nguyên sau vào đầu danh
sách liên kết đôi: 20, 22, 1, 3, 5, 7. Sau đó, lần lượt thêm các số nguyên sau vào cuối danh
sách liên kết đôi: 20, 21, 22, 1, 3, 5, 7. Cho 2 con trỏ head, tail lần lượt chứa địa chỉ của
Node đầu tiên và Node cuối cùng. Cho con trỏ temp chứa địa chỉ của Node đang chứa số
21. Cách làm nào sau đây cho ta đi đến vị trí của Node chứa số 1 (bất kì số 1 nào trong hai
số 1) với số lần duyệt qua các Node khác ít nhất?
A. Từ head duyệt về phía cuối danh sách
B. Từ tail duyệt về phía đầu danh sách
C. Từ temp duyệt về phía cuối danh sách
D. Từ temp duyệt về phía đầu danh sách

Solution: C, kết quả sau khi thêm 7(head),5,3,1,22,20,20,21(temp),20,1,3,5,7(tail) dễ


dàng thấy temp duyệt về cuối cách số 20 tới số 1

4. [2.4] Phát biểu nào là đúng về điểm khác nhau của 1 Node trong Danh sách liên kết đôi so
với danh sách liên kết đơn?
A. Node có 2 trường dữ liệu.

https://www.facebook.com/groups/211867931379013 Trang 10/19


Nhóm thảo luận CSE
Võ Tiến

B. Node có 2 liên kết.


C. Node có 2 con trỏ head1 và head2.
D. Node có 2 con trỏ tail1 và tail2.

Solution: B, danh sachs liên kết đôi thì có 2 node* next và *prev, A trường dữ liệu
bao nhiêu chả được, C,D head tail bao nhiêu cũng được

5. [2.5] Phát biểu nào là đúng về điểm khác nhau của 1 Node trong Danh sách liên kết đôi so
với danh sách liên kết đơn?
A. Node có 2 trường dữ liệu.
B. Node có 2 liên kết.
C. Node có 2 con trỏ head1 và head2.
D. Node có 2 con trỏ tail1 và tail2.

Solution: B, danh sachs liên kết đôi thì có 2 node* next và *prev, A trường dữ liệu
bao nhiêu chả được, C,D head tail tùy ý

6. [2.6] Cho các phát biểu sau:

1. Hiện thực danh sách bằng mảng nên chỉ áp dụng cho các danh sách có ít phần tử.
2. Hiện thực danh sách bằng mảng nên chỉ áp dụng cho các danh sách thường xuyên truy
cập các phần tử.
3. Hiện thực danh sách bằng mảng phù hợp cho các danh sách thường xuyên diễn ra thao
tác thêm và xóa vì tính đơn giản trong hình thức lưu trữ.
4. Việc dịch chuyển một số lượng phần tử không bị tác động nhiều khi ta thêm phần tử
vào cuối danh sách.

Số phát biểu đúng là


A. 3.
B. 0.
C. 2.
D. 1.

Solution: C, đáp án đúng là 1, 4 hiện thực danh sách bằng mảng chỉ áp dụng cho ít
phần tử, có phần tử cố định, và thường thêm xóa tại cuối mảng. Câu 2, 3 hiện thực
danh sách mà thường xuyên cập nhật với thêm xóa thì lưu trữ bằng danh sách liên kết.

7. [2.7] Trong danh sách liên kết đôi vòng (Circularly double linked list), khi thêm xóa 1 phân
cần cập nhật bao nhiêu con trỏ?
A. 1.
B. 2.

https://www.facebook.com/groups/211867931379013 Trang 11/19


Nhóm thảo luận CSE
Võ Tiến

C. 3.
D. 4.

Solution: B, khi xóa 1 phần tử ta cần cập nhật next của phần tử phía sau và prev của
phần tử phái trước.

8. [2.8] Cho trước con trỏ quản lý node X trong 1 danh sách liên kết đơn chứa nhiều hơn 1
node. Chỉ dùng duy nhất con trỏ này thì có thể xóa node X ra khỏi danh sách không (không
được dùng con trỏ head)
A. Không thể.
B. Được, nếu X không phải node cuối cùng.
C. Trong mọi trường hợp.
D. Được nếu node không phải node đầu tiên.

Solution: D, chỉ cần node có phần tử phía trước thì sẽ xóa được ta chỉ cần đưa X đên
vị trí trước node và cập nhật next của vị trí hiện tại. vì Head không có node trước node
nên không xóa được và head không được cập nhật

9. [2.9] Giả sử chúng ta hiện thực hàng đợi bằng Circularly linked list có phần tử đầu là Front
và phần tử cuối là Rear, con trò p được dùng để truy xuất các phần tử trong queue. Con
trỏ p nên trỏ đến node nào để các tác vụ cơ bản có thể thực hiện 1 cách nhanh chóng?
A. Không thể.
B. Node Rear.
C. Node Bất kì.
D. Node Front.

Solution: B, đối với Queue thì thao tác cơ bản thêm phần tử vào đầu danh sách và
xóa phần tử cuối danh sách nên Node Rear node cuối đều xử lí với độ phức tạp O(1).
còn node Front xử lí độ phức tạp O(N)

10. [2.10] Giả sử bạn có con trò head và tail để quản lý danh sách liên kết đơn. Thao tác nào
sau đây phụ thuộc và chiều dài danh sách?
A. Thêm 1 phần tử vào đầu danh sách.
B. Thêm 1 phần từ vào cuối danh sách.
C. Xóa 1 phần tử ở đầu danh sách.
D. Xóa 1 phần tử ở cuối danh sách.

Solution: D, phụ thuộc chiều dày có nghĩa là độ phức tạp O(N), chỉ có câu D vì khi
xóa ta cần phải tìm được Node phía trước tail, còn các đáp án còn lại là O(1)

https://www.facebook.com/groups/211867931379013 Trang 12/19


Nhóm thảo luận CSE
Võ Tiến

11. [2.11] Để thao tác nối (concate) 2 danh sách thành 1 danh sách có độ phức tạp O(1), thì 2
danh sách ban đầu được hiện thực dưới dạng:
A. Mảng.
B. Danh sách liên kết đơn.
C. Danh sách liên kết đôi vòng
D. Dánh sách liên kết đôi

Solution: B, ta chỉ cần cập nhật tail->next = head, còn array thì không thể độ phức
tạp O(N), còn danh sách liên kết đôi và đôi vòng thì cần nhập nhật ít nhất 2 lần head
và tail.

12. [2.12] Dấu hiệu nào dưới đây cho biết danh sách liên kết đơn L là rỗng?
A. head->next=NULL.
B. head=NULL.
C. head->data=NULL.
D. head->data=0.

Solution: B, thì phần tử đầu tiên NULL thì danh sách đó rỗng

13. [2.13] Định nghĩa nào dưới đây là đúng với danh sách liên kết?
A. Danh sách liên kết là cấu trúc dữ liệu dạng cây.
B. Danh sách liên kết là cấu trúc dữ liệu tự định nghĩa
C. Danh sách liên kết là tập hợp các phần tử mà giữa chúng có một sự nối
kết với nhau thông qua vùng liên kết của chúng
D. Danh sách liên kết là tập hợp các phần tử đặt kề cận với nhau trong vùng nhớ

Solution: C, Câu D là array, câu B thì định nghĩa kiểu gì có thể là mảng, tree, grap
hay sao.

14. [2.14] tối đa Kích thước của một danh sách liên kết, cần được khai báo trước không.
A. Cần khai báo, điều kiện nhỏ hơn INT_MAX
B. Không Cần khai báo, điều kiện nhỏ hơn INT_MAX
C. Không cần khai báo vì kích thước vô hạn
D. cần khai báo một số hữu hạn

Solution: C, Danh sách liên kết không cần quan tâm khai báo kích thước và số lượng,
chỉ có mảng.

15. [2.15] Điều nào sau đây giống nhau về danh sách liên kết đơn và danh sách liên kết đôi?

https://www.facebook.com/groups/211867931379013 Trang 13/19


Nhóm thảo luận CSE
Võ Tiến

A. Cả hai đều không thể truy cập dữ liệu ở một vị trí ngẫu nhiên trong thời gian
không đổi.
B. Cả hai đều có thể thêm một nút mới sau nút đã cho hoặc vào đầu danh sách trong
thời gian O(1).
C. Cả hai đều có thể xóa nút đầu tiên trong thời gian O(1).
D. Tất cả những điều trên

Solution: D, Danh sách đơn thêm phần từ ở đầu cuối và xóa đầu là O(1), chỉ có xóa
ở cuối là O(N), Danh sách liên kết đôi thì tất cả xử lí ở đầu cuối đều O(1)

16. [2.16] Thuật toán sắp xếp nào sau đây được ưu tiên sử dụng để sắp xếp danh sách liên kết?
A. Merege Sort
B. Quick Sort
C. Insertion Sort
D. Sell Sort

Solution: A, Merege Sort được ưu tiên hơn các thuật toán sắp xếp khác để sắp xếp
danh sách liên kết vì sắp xếp hợp nhất truy cập dữ liệu một cách tuần tự (duyệt từ dầu
đến cuối) và nhu cầu truy cập ngẫu nhiên (truy cập như array) thấp.

Cho đoạn code sau làm 5 câu tiếp theo

1 template <typename E> class Node


2 {
3 public:
4 virtual E& element() = 0; // return the node ’s value
5 virtual Node* next() = 0; // return the next node
6 virtual void setElement(const E& value) = 0; // set the node ’s value
7 virtual void setNext(Node* next) = 0; // set the next node
8 };
9

10 template <typename E>


11 int length ( Node<E> *head)
12 {
13 if(head) return 0;
14 else if(/*(a)*/ ) return 1;
15 return /*(b)*/ ;
16 }
17

18 template <typename E>


19 Node<E> * insertHead (Node<E> *head, Node<E> * newNode)
20 {
21 if(head == NULL) /*(c)*/ ;
22 else newNode->setNext(/*(d)*/ );

https://www.facebook.com/groups/211867931379013 Trang 14/19


Nhóm thảo luận CSE
Võ Tiến

23 return /*(e)*/ ;
24 }

17. [2.17] điền code vào vị trí của (a)


A. head->next() == NULL
B. head->element() == 0
C. head.element() == 0
D. head == NULL

Solution: A, này điều kiện dừng của đệ quy head->next() == NULL chứng tỏ chí còn
1 phần tử nên return 1

18. [2.18] điền code vào vị trí của (b)


A. length(head->next())
B. head->element()
C. 1 + length(head->next())
D. 1 + leng(thhead->next)

Solution: C, tăng kích thước lên 1 và đệ quy tới node tiếp theo, D sai vì có thể next
đang private

19. [2.19] điền code vào vị trí của (c)


A. head = newNode->next()
B. head = newNode
C. head->setNext(newNode)
D. newNode->setNext(head)

Solution: B, này là trường hợp danh sách rỗng

20. [2.20] điền code vào vị trí của (d)


A. head
B. head->next()
C. head->setNext(newNode)
D. newNode->setNext(head)

Solution: A, này là trường hợp thêm vào đầu danh sách không rỗng

https://www.facebook.com/groups/211867931379013 Trang 15/19


Nhóm thảo luận CSE
Võ Tiến

21. [2.21] điền code vào vị trí của (e)


A. head
B. head->next()
C. newNode
D. newNode->next()

Solution: C, khi này newNode là đầu danh sách nên trả về đầu danh sách.

Câu hỏi cho 5 câu tiếp theo

1 template <typename E> class DoubleLinkedList; // forward declaration


2

3 template <typename E> class Node


4 {
5 private:
6 E element;
7 Node *next, *prev;
8 friend class DoubleLinkedList;
9 public:
10 Node(): next(nullptr), prev(nullptr) {}
11 };
12

13 template <typename E> class DoubleLinkedList


14 {
15 private:
16 Node<E> *head, *tail;
17 int size;
18 public:
19 DoubleLinkedList():size(0),head(NULL), tail(NULL) {}
20 void insert (Node<E>*, int);
21 };
22

23 template <typename E>


24 void DoubleLinkedList<E>::insert (Node<E> *newNode, int index)
25 {
26 if(size == 0) head = tail = newNode; // insert empty
27 else if(index <= 0) // insert head
28 {
29 newNode->next = head;
30 /*(a)*/
31 head = newNode;
32 }
33 else if(index >= size) // insert tail
34 {
35 /*(b)*/
36 newNode->prev = tail;
37 tail = newNode;

https://www.facebook.com/groups/211867931379013 Trang 16/19


Nhóm thảo luận CSE
Võ Tiến

38 }
39 else // insert mid
40 {
41 Node<E> temp = head;
42 while(/*Code*/ ){
43 /*(c)*/
44 index --;
45 temp = temp->next;
46 }
47 }
48 /*(d)*/
49 }

22. [2.22] điền code vào vị trí của (a)


A. head->prev = newNode;
B. head->next = newNode;
C. newNode->prev = NULL;
D. newNode->prev = head->next;

Solution: A, khi chèn vào đầu thì newNode sẽ là đầu danh sách nên head lúc này đang
ở vị trí node1 nên cần cập nhật prev trỏ tới node trước nó

23. [2.23] điền code vào vị trí của (b)


A. tail->next = newNode;
B. tail->next = NULL;
C. tail->prev = newNode;
D. tail->prev = NULL;

Solution: A, khi chèn ở cuối thì node trước của tail hiện tại là newNode nên node phía
sau newNode là tail

24. [2.24] điền code vào vị trí của (c) nếu (Code) ta điền index! = 0
A. newNode->next = temp->next;
newNode->prev = temp;
temp->next = newNode;
newNode->next->prev = newNode;
B. newNode->next = temp;
newNode->prev = temp->prev;
temp->prev = newNode;
newNode->prev->next = newNode;
C. newNode->next = temp->next;
newNode->next->prev = temp->prev;
temp->prev = newNode;
newNode->prev->next = newNode;

https://www.facebook.com/groups/211867931379013 Trang 17/19


Nhóm thảo luận CSE
Võ Tiến

D. Tất cả đều sai.

Solution: A, xét index != 0 có nghĩa là temp đang ở trước vị trí cần chèn -> chèn
newNode tại vị trí phía trước của temp, cần cập nhật next, prev của node mới và cập
nhật next của node phía sau node temp khi chưa chèn và prev của node temp

25. [2.25] điền code vào vị trí của (c) nếu (Code) ta điền index! = 1
A. newNode->next = temp->next;
newNode->prev = temp;
temp->next = newNode;
newNode->next->prev = newNode;
B. newNode->next = temp;
newNode->prev = temp->prev;
temp->prev = newNode;
newNode->prev->next = newNode;
C. newNode->next = temp->next;
newNode->next->prev = temp->prev;
temp->prev = newNode;
newNode->prev->next = newNode;
D. Tất cả đều sai.

Solution: B, xét index != 1 có nghĩa là temp đang ở sau vị trí cần chèn -> chèn
newNode tại vị trí phía sau của temp, cần cập nhật next, prev của node mới và cập
nhật prev của node phía trước node temp khi chưa chèn và next của node temp

26. [2.26] điền code vào vị trí của (d)


A. head = newNode;
B. size ++;
C. size –;
D. size += 2;

Solution: B, tăng kích thước lên

https://www.facebook.com/groups/211867931379013 Trang 18/19


Nhóm thảo luận CSE
Võ Tiến

nhóm thảo luận CSE


https://www.facebook.com/groups/211867931379013
CHÚC CÁC EM THI TỐT

https://www.facebook.com/groups/211867931379013 Trang 19/19


Nhóm thảo luận CSE

You might also like