在列表尾部插入元素时出现问题JAVA

k3fezbri  于 2023-01-24  发布在  Java
关注(0)|答案(2)|浏览(97)

我的任务是将linkedList实现为队列。我在列表尾部添加元素时遇到了问题。我没有得到异常,但问题是添加元素后列表仍然为空,我真的没有看到问题。有人有解决方案吗?:)

@Override
public void add(E element) {
        if(element == null){
            throw new NullPointerException();
        }else{
            this.addNodeLastInQueue(element); 
        }
    
}

public void addNodeLastInQueue(E element){
    
        MyNode<E> nodeToBeAdded = new MyNode<E>(element);  
        if(isEmpty()){
            head = nodeToBeAdded;
            tail = nodeToBeAdded;//Osäker om denna behövs
        }else{
            tail.setNext(nodeToBeAdded);   
            tail = nodeToBeAdded;
        }  
    }

我已经尝试了我能想到的一切

hgtggwj0

hgtggwj01#

public class MyNode<E> {

        private E data;
        private MyNode <E> next;
  
        public MyNode(E data) {
           this.data = data;
           this.next = null; 
        }  
    }

public void enQueue(E element) {
        MyNode<E> oldTail = tail;
        tail = new MyNode<E>(element);
        tail.data = element; 
        tail.next = null;
        if (isEmpty()) head = tail;
        else           oldTail.next = tail;
    }

@Override
public void add(E element) {
    if(element == null){
        throw new NullPointerException();
    }else{
        this.enQueue(element); 
    }
    
}
rryofs0p

rryofs0p2#

根据定义,当你在队列中添加一个元素时,它会自动出现在列表的末尾(参见FIFO),所以你不需要调用方法“addNodeLastInQueue”,最好的做法是调用它“enqueue”。
这里的方法:

public void enqueue(E element) {
    Node<E> oldlast = last;
    last = new Node<E>();
    last.e = e; // It refers to the "e" attribute in static class
    last.next = null;
    if (isEmpty()) first = last;
    else           oldlast.next = last;
    n++;
}

提示:我建议你实现一个helper链表静态类,以便为队列提供Node属性。事实上,我在我的方法中使用了它。

// helper linked list class
private static class Node<E> {
    private E e;
    private Node<E> next;
}

希望我能帮上忙。再见!

相关问题