Говорят, что добавление и удаление в связанном списке происходит в постоянное время, то есть O (1), но доступ к элементам происходит во времени, пропорциональном размеру списка, то есть O (N). Мой вопрос заключается в том, как вы можете удалить или добавить какой-либо элемент без его первого перехода? В этом случае это не дополнение или исключение порядка O (N)?На практике добавляется связанный список O (N) или O (1)?
На примере Java, что происходит, когда мы используем API, как это:
LinkedList stamps = new LinkedList();
stamps.add(new Stamp("Brazil"));
stamps.add(new Stamp("Spain"));
---
----
stamps.add(new Stamp("UnitedStates"); //say this is kth element in the list
----
stamps.add(new Stamp("India");
Тогда, когда кто-то делает stamps.remove (к), как это может произойти операция в постоянном времени?
Предположим, что клиент LinkedList имеет вызов типа stamps.add (k, новый штамп («UK»). В этом случае операция будет занимать время со сложностью O (n), независимо от того, что реализация связанного списка знает, какой узел в данный момент находится в конце списка. Не так ли? – Inquisitive
Да, конечно. Чтобы узнать, какой узел является «k» -й, вы ВСЕГДА должны проходить итерацию через содержимое списка. –