Suppose we are considering a singly linked list and p is some node in the list which has both predecessor and successor nodes. Select the most correct java code snippet that deletes the node p.

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 = head; while(f.next != p) f = f.next; f.next = p.next;". Danh sách liên kết đơn không có liên kết lùi, nên muốn tháo p ta buộc phải dò từ head để tìm nút tiền nhiệm; điều kiện f.next khác p dừng đúng lúc f là nút đứng ngay trước p, và f.next bằng p.next nối tiền nhiệm sang hậu nhiệm, đưa p ra khỏi chuỗi. Vì vậy "Node f = head; while(f.next != null) f = f.next; f.next = p.next;" sai vì vòng lặp chạy tới nút cuối rồi cho nút cuối trỏ về một nút nằm phía trước nó, tạo vòng tròn trong danh sách mà p vẫn còn nguyên. "Node f = head; while(f != p) f = f.next; f.next = p.next;" sai vì vòng lặp dừng khi f chính là p, nên f.next bằng p.next là gán cho chính nó, không liên kết nào thay đổi. "Node f = head; while(f != null) f = f.next; f.next = p.next;" sai vì vòng lặp chỉ kết thúc khi f đã bằng null, nên lệnh f.next ngay sau đó ném NullPointerException.

Cùng phần 1

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