c和java

时间:2017-03-08 11:34:14

标签: java c linked-list nodes

在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时添加节点。有人可以解释一下我的区别吗?为什么它会像这样工作?

对不起,我的问题解释得很糟糕。(你可以在评论中提出更好的理解)

1 个答案:

答案 0 :(得分:0)

在C中,您在内存中有一个定义良好的位置,您会遇到此null。然后用新节点替换该空值。

在Java中,您正试图将一个新节点放在不知名的地方。此null不再与任何内容相关联。当然,你知道它来自k.right,但你在onDestroy()的那一点上你只有空值,而不是它的地址。与C不同。因此,没有办法将新节点放在任何地方,你就会收到错误。

正如您自己想出的那样,只需使用k = new检查即可。这基本上就是C代码所做的事情,只是隐藏在另一层指针之后。