В java реализации Singlely Linked List, почему не печатается последний элемент связанного списка? - PullRequest
0 голосов
/ 04 мая 2020
public class Linked_List <E>{
    public static class Node<E>{
        private E element;
        private Node<E> next;
        public Node(E e,Node<E> n) {
        element=e;
        next=n;
    }
    public E getElement() {
        return element;
    }
    public Node<E> getNext() {
        return next;
    }
    public void setNext(Node<E> n) {
        next=n;
    }
}

public Node<E> head=null;
public Node<E> tail=null;
public int size=0;

public Linked_List() {}

public int size() {
    return size;
}

public boolean isEmpty() {
    return size==0;
}
public void addFirst(E e) {
    head=new Node<>(e,head);
    if(size==0)
        head=tail;
    size++;
}

public void addLast(E e) {
    Node<E> newest =new Node<>(e,null);
    if(isEmpty())
        head=newest;
    else
        tail.setNext(newest);
    tail=newest;
    size++;
}
public void show() {

    Node<E> n=head;
    if(size==0) {
        System.out.println("No elements to print");
        System.exit(0);
    }
    while(n.next!=null) {
        System.out.println(n.element);
        n=n.next;
    }
    System.out.println(n.element);
}

public static void main(String[] args) {
    Linked_List<Integer> list = new Linked_List<Integer>();

    list.addFirst(10);
    list.addFirst(11);
    list.addFirst(12);

    list.show();

}
}

В методе show (), когда while достигает последнего элемента списка, он завершается, поэтому элемент не печатается. Отсюда последний оператор print в методе show. Я добавил три элемента в список, но когда я выполняю метод show (), печатаются только первые два элемента, 12 и 11. Что мне не хватает? Благодаря.

Ответы [ 4 ]

3 голосов
/ 04 мая 2020

Как насчет здесь. Это должно сказать tail = head;

    public void addFirst(E e) {
        head = new Node<>(e, head);
        if (size == 0) {
            head = tail;
        }
        size++;
    }
0 голосов
/ 04 мая 2020

addFisrt () изменяется на:

public void addFirst(E e) {
    head = new Node<>(e, head);
    size++;
}

вы можете отлаживать addFirst (), первый элемент никогда не добавляется в LinkedList.

0 голосов
/ 04 мая 2020

Вы ответили на свой вопрос:

В методе show (), когда while достигает последнего элемента списка, он завершается, поэтому элемент не печатается.

Этот код:

while(n.next!=null) {
    System.out.println(n.element);
    n=n.next;
}

говорит "пока это не последний элемент, напечатайте его". т. е. код явно не хочет печатать последний элемент.

Я предполагаю, что вы не включили окончательное утверждение print в описание проблемы - что вы добавили последний print для обхода времени -l oop проблема.

Вам нужно:

while (n != null) {
    System.out.println(n.element);
    n = n.next;
}

, который говорит: «Пока это фактический элемент, напечатайте его».

0 голосов
/ 04 мая 2020

Проблема в состоянии while l oop:

while(n.next!=null) {
        System.out.println(n.element);
        n=n.next;
    }

Когда список достигает элемента n-1, он напечатает элемент, а затем n станет n=n.next, который является последним элементом , Но теперь, будучи n последним элементом, его n.next будет нулевым, поэтому время будет нарушено, поскольку условие больше не выполняется.

...