伙计们,在列表末尾插入新节点时,我确实遇到了问题。在开始插入工作良好,但在插入结束它显示空指针异常。
请查看inserAtEnd方法并建议我如何处理:
package linkedlist;
class Node{
Node next;
Object data;
Node(Object x)
{
data=x;
}
}
class LL
{
Node first;
LL(Node f)
{
first =f;
}
void insertAtBeg(Object x)
{
Node n= new Node(x);
n.next=first;
first=n;
}
void insertAtEnd(Object x)
{
Node n= new Node(x);
Node k;
k=first;
while(k!=null)
{
k=k.next;
}
k.next=n;
}
void print()
{
Node p=first;
while(p!=null)
{
System.out.print(p.data+"-->");
p=p.next;
}
}
}
public class LinkedList {
public static void main(String[] args) {
LL l = new LL(null);
l.insertAtBeg("Raj");
l.insertAtBeg("Am ");
l.insertAtBeg("I ");
l.insertAtBeg("100 ");
l.insertAtEnd("Hello");
l.print();
System.out.println("returned in main");
}
}
问题是你的循环直到k为空,你想要直到k.next
等于空。您还可以通过为最后一个节点设置一个变量来解决这个问题(这几乎总是这样做的)。我提供的代码在不添加任何新变量的情况下修复了这个问题:
void insertAtEnd(Object x) {
Node n= new Node(x);
Node k;
k=first;
while(k.next != null) {
k=k.next;
}
k.next=n;
}