Tôi là sinh viên ngành khoa học máy tính ở Đức. Giáo sư của tôi đã sử dụng câu hỏi sau đây để suy nghĩ về:Thuật toán để xóa một phần tử trong một danh sách liên kết đơn với O (1) phức tạp
'Cho một tham chiếu đến một nút trong một danh sách liên kết duy nhất (không phải là nút cuối cùng). Đưa ra một thuật toán để xóa phần tử này khỏi danh sách có độ phức tạp O (1) trong khi duy trì tính toàn vẹn '.
Tôi đã nghĩ về điều này, nhưng tôi khá chắc chắn rằng không có thuật toán như vậy. vì nó là một danh sách liên kết duy nhất, bạn phải lặp qua tất cả các nút trong danh sách cho đến khi bạn đạt đến nút cần xóa, bởi vì bạn phải sửa đổi con trỏ tiếp theo trong nút trước khi xóa. Mà sẽ dẫn đến O (n) phức tạp.
Tôi có thiếu gì không?
Ah, hiểu rồi. Cảm ơn :) –
hãy cẩn thận, như Jon đã giải thích, rằng để làm việc này, cấu trúc nút cần phải riêng tư. Không nên giữ tham chiếu đến các nút, chỉ với dữ liệu. Nếu không, người tiêu dùng sẽ bị bỏ sót với tham chiếu không hợp lệ đối với đối tượng toDelete.next cũ (nếu bạn đang ở trong C++ chẳng hạn và bạn đã xóa cấu trúc nút), hoặc tốt nhất là một đối tượng nút không hợp lệ. –
Điều này không thực sự là một thuật toán '' để loại bỏ một phần tử từ một danh sách liên kết đơn là nó? Đây là phương pháp tiêu chuẩn để loại bỏ một phần tử khỏi danh sách. – Dinuk