Как посчитать количество узлов в связанном списке, не пересекая его? - PullRequest
7 голосов
/ 16 июня 2011

Меня спросили в интервью, как подсчитать количество узлов в связанном списке, не просматривая список? Есть ли способ добиться этого?

Ответы [ 4 ]

12 голосов
/ 16 июня 2011

Единственный способ, которым я могу придумать, - это добавить счетчик количества узлов, который увеличивается каждый раз, когда вызываются методы add или insert , и уменьшается, когда delete вызывается.Вы не можете делать предположения о занимаемой памяти, потому что, будучи связанным списком, вы не можете гарантировать, что все узлы будут в одном и том же блоке памяти (действительно, это крайне маловероятно).

2 голосов
/ 16 июня 2011

Если вы делаете распределение динамически с чем-то вроде malloc, то нет другого способа, кроме обновления счетчика каждый раз, когда вы вставляете / удаляете. Если вы не делаете динамическое распределение, значит, вы, вероятно, не реализовали связанный список.

0 голосов
/ 17 марта 2012

Добавьте счетчик в вашу структуру и сделайте связанный список круглым, а не одиночным.Вместо прохождения по всему списку просто перейдите к предыдущему узлу исходного узла.

0 голосов
/ 16 июня 2011

То, что говорят эти парни, совершенно верно. Как узнать, сколько предметов в чем-то есть, прежде чем посмотреть на них?

Вам нужно будет вести подсчет и увеличивать / уменьшать его при вставке / удалении. Это (самый | единственный) надежный способ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...