强调文本我需要传递LINKED LIST的标题和要插入该链表的数据。假设列表按排序顺序我需要检查每个节点的数据并插入新节点给出新排序的清单。
我得到空指针异常,我需要知道我做错了什么
/*
Insert Node at the end of a linked list
head pointer input could be NULL as well for empty list
Node is defined as
class Node {
int data;
Node next;
Node prev;
}
*/
Node SortedInsert(Node head,int data) {
Node root= head;
if(head==null){
root.data=data;
root.next=null;
root.prev=null;
}else if(head.data>data){
Node newnode = new Node();
newnode.data=data;
newnode.next=head;
newnode.prev=null;
head.prev=newnode;
root=newnode;
}
int k=0;
while(head!=null && k==0){
if(head.data<data && head.next.data>data && head.next!=null){
Node temp=head.next;
Node newnode = new Node();
newnode.data=data;
newnode.next=temp;
newnode.prev=head;
head.next=newnode;
temp.prev=newnode;k++; break;
}
else if(head.data<data && head.next==null){
//Node temp=head.next;
Node newnode = new Node();
newnode.data=data;
newnode.next=null;
newnode.prev=head;
head.next=newnode;k++;break;
//temp.prev=newnode;
}else
{head=head.next;}
}
return root;
}
我在循环中的第二个if语句中获取空指针异常。
答案 0 :(得分:0)
Node root= head;
if(head==null){
root.data=data;
这里你试图为空对象设置数据 你应该先为root分配内存 e.g。
head = new Node();
root = head
//then continue your code
答案 1 :(得分:0)
我在您的代码中发现了一些可能会给出NullPointerException
的错误。因此请相应更改。
首先出现的错误是:
Node root= head;
if(head==null){
root.data=data;
root.next=null;
root.prev=null;
}
所以在这里你需要首先创建一个Node类的对象并将其分配给root,这样代码将如下所示:
Node root= head;
if(head==null){
root=new Node();
root.data=data;
root.next=null;
root.prev=null;
}
我遇到的另一个错误是if(head.data<data && head.next.data>data && head.next!=null)
。
在head.next
访问之前,您应该验证head.next.data
。
假设head.next
是null
,那么循环condition
的评估就是这样。
1) head.data<data
所以假设返回true
,我们会检查下一个条件。
2) head.next.data>data
现在如果head.next
为null
,则此处条件为null.data
,这将引发NullPointerException
。所以在这里你还应该检查head.next
是否为空。你这样做是下一个条件,但它在验证之前就已经执行了。
所以在这里你只需要更改if
语句的条件顺序,如:if(head.data<data && head.next!=null && head.next.data>data)
。
这将解决您的问题。