Как добавить NODE в конец двойного связанного списка?

У меня есть задание по Java из класса. Речь идет о сотрудниках, поэтому есть три класса: Employee, EmployeeList и Nodes. Мне нужно сделать из этого двусвязный список. Связанный список — это пользовательский класс, созданный нами, а не предоставленный Java.

Теперь я застрял в методе add(Employee e). метод вводит параметры объекта Employee и должен быть добавлен в конец списка.

это код

public void add(Employee emp) {
    Node n = new Node(emp, null , null);
    if(isEmpty() == true) {
        setHead(n);
        setTail(n);
        n.setPrevious(null);
        n.setNext(n);
    }else {
        Node c = getTail();
        c.setNext(n);
        n.setPrevious(c);
        setTail(n);
    }
}

Проще говоря, когда список пуст, метод безупречно добавляет сотрудника в узел, даже когда я добавляю в список второго сотрудника, все в порядке; но когда я добавляю больше и пытаюсь получить его, я получаю неправильные результаты.

в основном, если список заполнен, то узлу c назначается конец списка. «Хвост или c» был равен нулю, но теперь это Node n. Узел n, поскольку это следующий элемент после хвоста, предыдущей ссылкой узла n является узел c, а хвост обновляется до узла n.

Что я здесь делаю неправильно? если я попытаюсь

list.getHead().getNext().getNext().getPrevious().getEmployee().getName());

где список = [а,б,в]; результат — c, где он должен быть b.

это;

head = a, a.getNext().getNext() == c;
c.getPrevious() == b;

но я остаюсь с

Что не так в коде? Пожалуйста помоги. высоко ценится

Помимо следования данному коду, камера не поможет понять, что не так. if(isEmpty() == true) { setHead(n); установить хвост (п); n.setPrevious (нуль); n.setNext (нуль); // n.setNext(n); }   —  person Sabbib    schedule 14.01.2014

Что бы вы посоветовали там неправильного? Благодарность   —  person Sabbib    schedule 14.01.2014

Я хочу сказать… ваш код выглядит нормально, единственная логическая вещь, которую я могу понять из данного кода, — это когда isEmpty() имеет значение true, n.setNext() должно иметь нулевое значение вместо n. Исправить проблему будет сложно. Лучше поставить точку останова и запустить приложение в режиме отладки и посмотреть, где узлы неправильно назначаются/размещаются.   —  person Sabbib    schedule 14.01.2014

См. также:  Почему срабатывает мое окно времени обработки, а время события - нет

Можете ли вы опубликовать код для каждого метода, используемого здесь? getNext, stNxt, getPrevious, setPrevious, …   —  person Sabbib    schedule 14.01.2014

Я почему-то не могу выложить все здесь. dropbox.com/sh/tsxa1sjd72dm4gx/KBlF1b-qtA   —  person Sabbib    schedule 15.01.2014

Понравилась статья? Поделиться с друзьями:
IT Шеф
Комментарии: 1
  1. Sabbib

    В вашем методе add нет ничего плохого, как показано в следующем коде:

    public class Q21114229 {
    
    public static void main(String[] args) {
    
        DLList<Employee> l = new DLList<Employee>();
        l.add(new Employee("a"));
        l.add(new Employee("b"));
        l.add(new Employee("c"));
        System.out.println("Employee b test: " + l.getHead().getNext().getNext().getPrevious().get().getName());
    }
    
    static class Node<T> {
    
        private Node<T> next;
        private Node<T> previous;
        private T value;
        public Node(T value) { this.value = value; }
        public T get() { return value; }
        public Node<T> getNext() { return next; }
        public void setNext(Node<T> next) { this.next = next; }
        public Node<T> getPrevious() { return previous; }
        public void setPrevious(Node<T> previous) { this.previous = previous; }
    }
    
    static class DLList<T> {
    
        private Node<T> head;
        private Node<T> tail;
        public Node<T> getHead() { return head; }
        public Node<T> getTail() { return tail; }
        public boolean isEmpty() { return (head == null); }
    
        public void add(T value) {
            Node<T> n = new Node<T>(value);
            if (isEmpty()) {
                head = tail = n;
            } else {
                tail.setNext(n);
                n.setPrevious(tail);
                tail = n;
            }
        }
    
    }
    
    static class Employee {
    
        private String name;
        public Employee(String name) { this.name = name; }
        public String getName() { return name; }
    }
    
    }
    

    Вывод:

    Employee b test: b
    

    Один из других методов списка неправильно обновляет следующие/предыдущие переменные узла.

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: