Хорошо, я не буду давать вам полную реализацию класса, но вместо этого я дам вам несколько советов.
- Вам не нужно хранить ссылку на последний элемент. Поместите ссылку Prev и Next на ваши узлы, и ваш последний узел будет первым. Предыдущая
Помимо того, что круговые списки не имеют конца, они почти такие же, как обычные списки, но где вы найдете последний элемент, подобный этому:
Узел tmp = первый;
while (tmp.Next! = Null)
tmp = tmp.Next;
В круговом списке идея выглядит так:
Node tmp = first;
while ( tmp.Next != first )
tmp = tmp.Next;
Потому что вы никогда не найдете узел, указывающий на ноль, если список не пуст. И последний совет: если вам нужно реализовать индексатор, помните, что в циклическом списке нет такой вещи, как индекс вне диапазона, потому что
list[count] = list[0] = list[count * k]
Имейте это в виду, поэтому вычисление индекса для этих методов может быть довольно сложным. Для положительных показателей основная идея:
index = index % count;
Для отрицательных немного отличается. Я надеюсь, что смогу помочь вам с моими словами. Если вы хотите реализации, я считаю, что их должно быть несколько, если вы вежливо спросите Google:)
Удачи!