2013-03-30 2 views
1
while(element != null) 
{ 
    //temp = element (useless) 
    element = element.node; 

    //can't do (element.node).method(); 
    //neither temp.method(); 
} 

Чтобы пройти по LinkedList, мы делаем это. Однако, если я хочу вернуться к более раннему узлу? Возможно ли это? Я думал о сохранении узла в переменной temp, но я не смог бы изменить узлы в LinkedList, поскольку временная переменная сохранит только значение узла, а не объекта.Как вы вернетесь к более раннему узлу?

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

+0

Вам нужно будет предоставить нам больше контекста. Можете ли вы дать нам объявление класса для 'element'? – templatetypedef

+0

Вам нужно написать свой собственный список? Если нет, рассмотрите использование сборников Java. – Marvo

ответ

0

Существует связанная структура данных, называемая "Doubly linked list", в которой помимо сохранения указателя на следующий элемент вы также сохраняете указатель на предыдущий элемент. Таким образом, вы можете не только спуститься по списку, но и выполнить резервное копирование. Будет ли это служить вашей цели?

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

+0

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

+0

Если 'element' - это некоторый объект-узел, и вы назначаете ему временную переменную с помощью' Node temp = element; '(или что-то в этом роде), то изменения, внесенные вами в' temp', также будут влиять на 'element'. –

+0

Исключением является то, что вы должны переназначить 'temp' чем-то вроде' Node temp = element; temp = new Node(); 'В этом случае' element' НЕ будет новым узлом. –

0

Двусторонний список, как упоминает выше Джимми Ли, является классическим подходом. Вы также можете сохранить ссылки на «интересные» узлы. Или вы можете создать новый связанный список со ссылками, идущими в противоположном направлении по мере прохождения списка. И, наконец, один трюк состоит в том, чтобы просто перевернуть ссылки по мере прохождения списка, но это изменит исходный список.

+0

как вы сохраняете ссылки? как я понятия не имею. Я не преподавал такой метод. – user2089523

+1

Все в Java выполняется по ссылке. Когда вы говорите в своем примере 'element = element.node', элемент теперь содержит ссылку на вещь, на которую ссылается element.node. Если вы исходите из фона программирования C, ссылки - это кто-то, аналогичный указателям. – Marvo

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