Я нашел этот код для добавления элемента в начало связанного списка, но, поскольку у меня есть последний узел, он работает не совсем правильно, поэтому я немного его изменил:
public void moveToFront(String node) {
DoubleNode previous = first;
temp = first;
while (temp != null) {
if (node.equals(temp.item)) {
//Found the item
previous.next = temp.next;
temp.next = first;
first = temp;
if (last.next != null) {
last = last.prev;
last.prev = previous;
}
return;
}
previous = temp;
temp = temp.next;
}
if (last.next != null)
спрашивает, был ли перемещен последний последний оригинал, и проверяет, есть ли у последнего последнего правильные ссылки.Теперь я думаю, что он работает правильно для моего кода.
Я хотел бы реализовать этот код, но для добавления элемента в конец.Однако последний просто не сейчас.При вызове last.prev
он получает только один элемент позади него, но last.prev.prev
до бесконечности - это тот же элемент.
Моя идея заключалась в том, чтобы вместо того, чтобы работать с первого раза, как в moveToFront()
, я работаю с последнего и перебираю каждый узел в обратном направлении, но, очевидно, это не работает, когда последний больше не работает.
public void moveToEnd(String node) {
DoubleNode previous = last;
temp = last;
System.out.println("last = " + last.prev.item);
System.out.println("temp = " + temp.item);
while (!temp.item.equals(first.item)) {
if(node.equals(temp.item)){
System.out.println("previous.prev = " + previous.prev.item);
}
previous = temp;
temp = temp.prev;
System.out.println("temp.prev = " + temp.prev.prev.prev.prev.prev.prev.prev.prev.prev.prev.prev.item);
}
Вот как я реализую свой связанный список:
public class LinkedListDeque {
public DoubleNode first = new DoubleNode(null);
public DoubleNode last = new DoubleNode(null);
public DoubleNode temp;
public int N;
LinkedListDeque() {
first.next = last;
last.prev = first;
}
private class DoubleNode {
String item;
int counter = 0;
DoubleNode next;
DoubleNode prev;
DoubleNode(String i) {
this.item = i;
}
}