Если вы настраиваете методы setNext
и setPrevious
не только для обновления их экземпляра, но и для экземпляра, установленного как next
и как previous
, вы должны зависеть от внешнего механизма.
Допустим, вы изначально создали Bus
A
и B
. Когда вы вызываете A.setNext( B )
, он также должен обновить предыдущий узел B
, не вызывая B.setPrevious( A )
. Аналогично тому, как когда вы добавляете что-то в LinkedList
в Java, вам не нужно вручную устанавливать связь между последним объектом и только что добавленным объектом. Что-то вроде
public void setPrevious(Bus bus) {
this.previous = bus;
if ( bus.next != this ){
bus.next = this;
}
}
Конечно, тогда вам все равно придется рассмотреть сценарий, в котором шина уже содержится в другом List
, что вам также необходимо обновить этот List
.
Следовательно, предложение отделить узлы от фактических экземпляров шины, как было предложено в одном из других ответов, является лучшей идеей. Это позволяет вам добавлять шины в несколько списков и, вероятно, облегчает написание вашего кругового списка (или просто использовать доступную реализацию для списка). Это также лучший дизайн ОО, так как вы можете использовать список, который вы написали.