任何人都可以帮我解决我遇到的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;
。
为什么它不起作用?感谢任何帮助,谢谢!
答案 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;
}
谢谢大家!