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

Adding to end of custom Linked List throws a NPE on "newNode.data = .."

嗨,谁能帮我解决我遇到的 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 循环遍历 link 然后我到达最后我插入包含 OBJ

的新节点

当前代码在这部分抛出空点异常错误:newNode.data=obj;.

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

您正在检查它是否为空并在之后设置它的数据。它会给一个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
if( head == null )
{
     //add to head
     ...
}
else
{
    //traverse the list
    for( Node tail = head;  tail.link != null;  tail = tail.link )
       ;

    //add to tail
    ...
}

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

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;
    }
}

条件是

while(newNode.link != null)

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

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

我现在的答案的解决方案似乎如我所愿,每次我调用 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; 

}

谢谢大家!