单个链接列表插入尾部

时间:2014-07-29 19:59:37

标签: java linked-list adt

每当我运行它时,它会在我测试函数时返回一堆:null,null,null。

//enqueue()
//adds newItem to the back of this Queue

public void insertItemLast(Object newItem){//make sure that it is not empty so we can do the cool stuff in here
    if(newItem == null)
        return;//user inputs nothing
    else {
        Node P = new Node(newItem);
        P.next = null;
        if(head == null){
            head = P;
            tail = P;
            //tail.next = null;
        }else{
            tail.next = new Node(newItem);
            tail = new Node(newItem);

            //tail.next = null;

        }

    }
    numItems++;
}//end enqueque

2 个答案:

答案 0 :(得分:1)

您可以创建两个不同的链接,而不只是一个。

你的其他人应该是:

 } else {
    tail.next = new Node(newItem);
    tail = tail.next;
}

实际上,你可以让它变得更简单。在所有情况下,只需使用P作为列表的新链接:

public void insertItemLast(Object newItem){
    if(newItem == null)
        return;//user inputs nothing
    else {
        Node P = new Node(newItem);
        P.next = null;
        if(head == null) {
            head = P;
            tail = P;
        } else {
            tail.next = P;
            tail = P;
        } 
    }
    numItems++;
}//end enqueque

答案 1 :(得分:0)

您正确地将新Node分配给tail.next,但您没有更新tail;您改为将另一个新的Node分配给tail,从而有效地打破了列表的尾部。

将旧tail推进到新tail - 新插入的Node - 替换

tail = new Node(newItem);

tail = tail.next;