#java #linked-list #nodes
#java #связанный список #узлы
Вопрос:
public class doubleLinkedList {
class Node {
String value;
Node prev;
Node next;
Node(String val, Node p, Node n) {
value = val;
prev = p;
next = n;
}
Node(String val) {
value = val;
prev = null;
next = null;
}
}
Node first;
Node last;
public doubleLinkedList() {
first = null;
last = null;
}
public boolean isEmpty() {
if (first == null)
return true;
else
return false;
}
/**The size method returns the length of the linked list
* @return the number of element in the linked list
*/
public int size() {
int count = 0;
Node traverse = first;
while (traverse != null) {
count ;
traverse = traverse.next;
}
return count;
}
public void add(String element) {
if (isEmpty()) {
first = new Node(element);
last = first;
} else {
Node p = first;
Node elementTobeAdded;
while (((p.value).compareTo(element)) > 0 amp;amp; p.next != null) {
p = p.next;
}
if (p.next != null) {
elementTobeAdded = new Node(element, p, p.next);
p.next.prev = elementTobeAdded;
p = elementTobeAdded.prev;
} else {
elementTobeAdded = new Node(element, p, null);
p.next = elementTobeAdded;
elementTobeAdded.next = null;
last = elementTobeAdded;
}
}
}
public void printForward() {
Node printNode = first;
while (printNode != null) {
System.out.print(printNode.value ", ");
printNode = printNode.next;
}
}
}
public class test {
public static void main(String[] args) {
doubleLinkedList car = new doubleLinkedList();
car.add("Jeep");
car.add("benz");
car.add("Honda");
car.add("Lexus");
car.add("BMW");
car.printForward();
}
}
Мой метод add пытается добавить узлы в список в алфавитном порядке. Мой метод printForward распечатывает каждый элемент в списке.
В моем основном методе он выводит «Jeep, benz, Honda, BMW», которые расположены не в алфавитном порядке.
Комментарии:
1. Вы просматривали свой код с помощью отладчика?
Ответ №1:
Измените регистр not empty для вашего метода add с этого
Node p = first;
Node elementTobeAdded;
while(((p.value).compareTo(element)) > 0 amp;amp; p.next != null)
{
p = p.next;
}
if(p.next != null)
{
elementTobeAdded = new Node(element,p,p.next);
p.next.prev = elementTobeAdded;
p = elementTobeAdded.prev;
}
else
{
elementTobeAdded = new Node(element, p, null);
p.next = elementTobeAdded;
elementTobeAdded.next = null;
last = elementTobeAdded;
}
к этому:
Node p = first;
while (p.value.compareTo(element) < 0 amp;amp; p.next != null) {
p = p.next;
}
if (p.value.compareTo(element) > 0) {
Node toAdd = new Node(element, p.prev, p);
p.prev = toAdd;
if (toAdd.prev != null) {
toAdd.prev.next = toAdd;
}else {
first = toAdd;
}
}else {
Node toAdd = new Node(element, p, p.next);
p.next = toAdd;
if (toAdd.next != null) {
toAdd.next.prev = toAdd;
}else {
last = toAdd;
}
}
Здесь было много ошибок. Самым большим было то, что вы никогда не проверяли случай, когда новый элемент должен быть вставлен в начало списка. Новый элемент всегда вставлялся после первого элемента, даже если он должен был быть первым.
Обратите внимание, что «benz» идет в конце, потому String.compareTo
что метод рассматривает заглавные буквы как идущие перед строчными буквами.
Ответ №2:
Это не связанный список… Вы написали какую-то очередь (с дополнительной возможностью удаления ее из очереди).
По поводу вашего вопроса — у вас ошибка в вашем методе «добавить» — по крайней мере, вы не проверяете, нужно ли двигаться вперед. Возможно, у вас есть другие ошибки, но слишком сложно читать такие стилизованные источники (пожалуйста, исправьте форматирование вашего вопроса)…