Как подсчитать количество узлов в связанном списке, не пересекая его?

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

4 ответов


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


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


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

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


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