在java中,当我访问null时,我无法将一个节点添加到链表中,例如
void add(int val,node k){
while(k!=null)
k=k.right;
k=new node(val,null);
}
在C中的位置
void add(ll* ll1,int val){
node* neu=(node*)malloc(sizeof(node));
neu->val=val;
neu->right=NULL;
if(ll1->head==NULL){
ll1->head=neu;
return;
}
node** curr=&(ll1->head);
while(*curr){
curr=&((*curr)->right);
}
(*curr)=neu;
}
我可以在访问NULL时添加节点。有人可以解释一下我的区别吗?为什么它会像这样工作?
对不起,我的问题解释得很糟糕。(你可以在评论中提出更好的理解)
答案 0 :(得分:0)
在C中,您在内存中有一个定义良好的位置,您会遇到此null。然后用新节点替换该空值。
在Java中,您正试图将一个新节点放在不知名的地方。此null不再与任何内容相关联。当然,你知道它来自k.right,但你在onDestroy()
的那一点上你只有空值,而不是它的地址。与C不同。因此,没有办法将新节点放在任何地方,你就会收到错误。
正如您自己想出的那样,只需使用k = new
检查即可。这基本上就是C代码所做的事情,只是隐藏在另一层指针之后。