Suppose we are considering a doubly linked list which has at least 2 nodes. Select the most correct java code snippet that deletes the last node.(prev is a link to a predecessor node)

4 phương ánCó giải thích

Các phương án trả lời

Chọn một phương án
Lời giảiChọn phương án để mở
Đáp án đúng: "Node f = tail.prev; f.next = null; tail = f;". Trong danh sách liên kết đôi, tail.prev cho ngay nút kế cuối mà không cần đi từ head, nên phép gán f = tail.prev là O(1); f.next = null cắt liên kết xuôi tới nút cuối cũ và tail = f dời đuôi về f, nhờ đó nút cuối cũ không còn ai tham chiếu và cả hai mốc head, tail đều nhất quán. Phương án "Node f = tail.prev; f.next = null;" cắt đúng nhưng bỏ quên tail, nên tail vẫn trỏ vào nút vừa bị loại: đi xuôi từ head thì không thấy nút cuối mà biến tail lại khẳng định nó còn đó. Phương án "Node f = tail.prev; f.next = tail; tail = f;" gán lại chính liên kết cũ rồi mới dời tail, kết quả là nút cuối vẫn nằm trong danh sách trong khi tail chỉ vào nút kế cuối, không nút nào bị xoá. Phương án "Node f = tail.prev; f.next = tail.next; tail = f.next;" lấy tail.next vốn bằng null nên f.next = null là đúng, nhưng ngay sau đó tail = f.next lại đặt tail bằng null, làm mất hẳn đuôi danh sách dù các nút phía trước vẫn còn.

Cùng phần 1

Xuất hiện trong 1 bộ đề