Итак, я не совсем уверен, что не так с моим методом toString.Я просто продолжаю иметь ошибку, когда я запускаю свои тесты, что это неправильно.
По сути, я занимаюсь реализацией циклической структуры данных DoublyLinkedList.Как и в односвязном списке, узлы в двусвязном списке имеют ссылку на следующий узел, но в отличие от односвязного списка, узлы в двусвязном списке также имеют ссылку на предыдущий узел.Кроме того, поскольку список «циклический», ссылка «следующий» в последнем узле в списке указывает на первый узел в списке, а ссылка «предыдущая» в первом узле в списке указывает на последний узел всписок.
Вот мой код:
public class DoublyLinkedList<E>
{
private Node first;
private int size;
@SuppressWarnings("unchecked")
public void add(E value)
{
if (first == null)
{
first = new Node(value, null, null);
first.next = first;
first.prev = first;
}
else
{
first.prev.next = new Node(value, first, first.prev);
first.prev = first.prev.next;
}
size++;
}
private class Node<E>
{
private E data;
private Node next;
private Node prev;
public Node(E data, Node next, Node prev)
{
this.data = data;
this.next = next;
this.prev = prev;
}
}
@SuppressWarnings("unchecked")
public void add(int index, E value)
{
if (first.data == null)
{
throw new IndexOutOfBoundsException();
} else if (index == 0)
{
first = new Node(value, first.next, first.prev);
}
else
{
Node current = first;
for (int i = 0; i < index - 1; i++)
{
current = current.next;
}
current.next = new Node(value, current.next, current.prev);
}
}
@SuppressWarnings("unchecked")
public void remove(int index)
{
if (first.data == null)
{
throw new IndexOutOfBoundsException();
}
else if (index == 0)
{
first = first.next;
}
else
{
Node current = first.next;
for (int i = 0; i < index - 1; i++)
{
current = current.next;
}--size;
current.next = current.next.next;
}
}
public E get(int index)
{
if(index < 0)
{
throw new IndexOutOfBoundsException();
}
if(index > size)
{
throw new IndexOutOfBoundsException();
}
Node current = first;
for (int i = 0; i < index; i++)
{
current = current.next;
}
return (E) current.data;
}
@SuppressWarnings("unchecked")
public int indexOf(E value)
{
int index = 0;
Node current = first;
while (current != current.next)
{
if (current.data.equals(value))
{
return index;
}
index++;
current = current.next;
}
return index;
}
public boolean isEmpty()
{
if (size == 0)
{
return true;
}
else
{
return false;
}
}
public int size()
{
return size;
}
Вот мой метод toString (), который, очевидно, отмечает, что это не правильно, когда я запускаю свои тесты, но я не знаю, что с ним не так,
Что он должен сделать, это вернуть строковое представление списка, начиная с «[», за которым следует каждый элемент, разделенный запятой и пробелом, и заканчивающийся «]».За последним элементом не следует запятая и пробел.Пустой список генерирует строку без пробелов, просто "[]".Эта реализация должна соответствовать ArrayList.
@SuppressWarnings("unchecked")
public String toString()
{
if (first.data == null)
{
return "[]";
}
else
{
Node current = first;
String result = "[" + current.data;
while (current.next != null)
{
result += current.data + ", ";
current = current.next;
}
result += "]";
return result;
}
}
}
Я знаю, что мой метод removeMethod () является неточным.Я задавал отдельные вопросы для них, если вы хотите помочь мне с ними, я был бы очень признателен.