Возникла проблема с методом insertBefore с использованием структуры данных Linked List - PullRequest
0 голосов
/ 03 октября 2018
public void insertBefore(T e) {
    if(empty())
    {
        insert(e);
    }
    else
    {
        if(head == current)
        {
            current.next = new Node<T>(current.data);
            current.data = e;
        }
        else
        {
            Node<T> oldCurrent = current;
            Node<T> newNode = new Node<T>(e);
            current = head;
            while(current != oldCurrent)
                current = current.next;
            newNode.next = oldCurrent;
            current.next = newNode;
            current = current.next;
        }
    }

}

insertBefore (T e): требуется: список L не полный.вход: эл.результаты: новый узел, содержащий элемент e, создается и вставляется перед текущим элементом в списке.Новый элемент e становится текущим элементом.Если список пуст, то e вставляется в начало, а также делается элементом head.вывод: нет

метод вставки () implmention

public void insert(T e) {

    Node<T> tmp;
    if (empty()) {
        current = head = new Node<T> (e);
    }
    else {
        tmp = current.next;
        current.next = new Node<T> (e);
        current = current.next;
        current.next = tmp;
    }


}

Я реализую этот метод как реализатор, класс Linked List имеет два узла, текущий узел и заголовок, когда мы вставляем узелтекущий перемещается к самому новому узлу, добавленному в список .. и метод retrieve возвращает текущие данные в текущем узле. Мои вопросы - это когда я набираю следующее в моей основной строке, чтобы я мог проверить реализацию этого метода в своем связанном списке.я не получил результаты, которые я намеревался использовать для моего метода, поэтому

    l.insert(2);
    l.insert(3);
    l.insert(4);
    l.insertBefore(5);
    l.findFirst();
    for(int i = 0;  i < 4 ; i++)
    {
        System.out.print(l.retrieve());
        l.findNext();
    }

результат моего тестирования: 2345 результатов: 2354

1 Ответ

0 голосов
/ 03 октября 2018

Если current != head, вы должны найти предыдущий узел текущего, а не самого текущего.как это:

Node<T> prev = head;
while (prev.next != current) {
    prev = prev.next;
}
prev.next = new Node<T>(e);
prev.next.next = current;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...