2013-02-26 4 views
0

Кто-нибудь знаком с указателями до * и после * при использовании двусвязного списка с двумя фиктивными узлами в C++? Я стараюсь учитывать все особые случаи вставки (пустой список, вставка спереди, вставка очень назад, вставка в середине) с использованием перед * и после * в качестве моих итераторов.до и после указателей, дважды связанный список в C++

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

Любая обратная связь с благодарностью. Заранее спасибо.

+3

Попробуйте выполнить его на бумаге. –

+0

Вы, очевидно, не захотите добавить один до/после головы/хвоста, я сомневаюсь, что это вы имели в виду. Вставка нового узла между головкой/хвостом и первым/последним элементом прекрасна, если не хорошая идея. ['std :: list'] (http://www.cplusplus.com/reference/list/list/) предоставляет push/pop_front/back. – ChiefTwoPencils

ответ

2

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

+0

Итак, все вставки должны быть возможны только с одним итератором и данными головой и хвостом? То, как вы объясняете, что нет особых случаев, имеет гораздо больше смысла, чем использование всех дополнительных указателей. Спасибо! – user2109706

+0

Вы храните голову и хвост, чтобы вы могли ходить по цепочке. Но для вставки вам просто нужна точка вставки. Он никогда не будет в начале, так как вы не можете вставить перед головным фиктивным узлом, и он никогда не будет в конце, так как вы не можете вставить после хвостового фиктивного узла. Это делает вещи красивыми и чистыми ... никаких особых случаев. –

Смежные вопросы