添加到自定义链接列表的末尾会在“newNode.data = ..”上引发NPE

时间:2015-02-11 18:09:44

标签: java nullpointerexception linked-list

任何人都可以帮我解决我遇到的LinkedList问题。我试图添加一个节点存储OBJ到我的列表的末尾,但我似乎无法得到它为什么不工作。以下是我到目前为止的代码:

public void addLast(int obj)
{
    ListNode newNode = new ListNode();
    newNode=head;
        while(newNode!=null)
        {
            newNode=newNode.link;
        }
        if(newNode==null)
        {
            newNode.data=obj;
        }

如果需要,我可以粘贴整个代码,但这只是我无法正常工作的部分。 目前大约有5个节点包含来自OBJ的数据,因此我使用while循环遍历链接然后到达结尾我插入包含OBJ的newNode

当前代码在此部分中抛出了一个空点异常错误:newNode.data=obj;

为什么它不起作用?感谢任何帮助,谢谢!

5 个答案:

答案 0 :(得分:3)

if( head == null )
{
     //add to head
     ...
}
else
{
    //traverse the list
    for( Node tail = head;  tail.link != null;  tail = tail.link )
       ;

    //add to tail
    ...
}

答案 1 :(得分:1)

首先,如果您使用头部节点开始,则不需要在此之前创建节点。其次,当你迭代你的结构时,你跳得太远了。

public void addLast(int obj)
{
    if (head == null) {
        // If we add an element for the first time
        head = new ListNode();
        head.data = obj;
    } else {
        newNode = head;
        while (newNode.link != null) {
            newNode = newNode.link;
        }
        // Now newNode.link is null
        // Creating the next node
        ListNode temp = new ListNode();
        temp.data = obj;
        // Assigning this new node to the last node's neighbor
        newNode.link = temp;
    }
}

答案 2 :(得分:0)

您正在检查其是否为null并在此之后设置其数据。它将给出一个NPE。到达最后时,请执行newNode.link = newNode

ListNode newNode = new ListNode();
newNode.data = obj;
if(head == null)
{ 
   head = newNode;
   return
}

ListNode curr = head;
while(curr.link!=null)
{
   curr=curr.link;
}
// curr now points to last node
curr.link = newNode

答案 3 :(得分:0)

条件是

while(newNode.link != null)

并在放入数据之前进行初始化

newNode.link = new ListNode();
newNode.data = obj

答案 4 :(得分:0)

我的答案的解决方案我现在似乎按照我想要的方式工作,每当我调用addLast()的实例时,它会存储所有当前链接并在列表末尾添加OBJ数据,最终代码为:

public void addLast(int obj)
{
    ListNode newNode = new ListNode();
    newNode = head;
    while (newNode.link != null) 
    {
        newNode = newNode.link;
    }          

    ListNode last = new ListNode();
    last.data = obj;
    newNode.link = last; 

}

谢谢大家!