添加到自定义链表的末尾会在 "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;
}
谢谢大家!
嗨,谁能帮我解决我遇到的 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;
}
谢谢大家!