java删除链表节点 ,请教大神,
大家,看看简单的,帮忙解释下,删除节点的一个代码。删除id为102的节点第(1)种算法:Monkeym1=newMonkey(101,"圆圆");Monkeym2=new...
大家,看看简单的,帮忙解释下, 删除节点的一个代码。
删除id为102的节点
第(1)种算法:
Monkey m1 = new Monkey(101, "圆圆");
Monkey m2 = new Monkey(102, "方方");
Monkey m3 = new Monkey(103, "角角");
Monkey m4 = new Monkey(104, "朱朱");
m1.next = m2;
m2.next = m3;
m3.next = m4;
m4.next = null;
// 创建一个假节点,作为链表的头节点
Monkey head = new Monkey(0, "石猴");
head.next = m1;
Monkey node = head.next;
Monkey prev = head;
while( node != null )
{
if(node.id == 102)
{
prev.next = node.next;
break;
}
prev = node; ///问题所在。
node = node.next;
}
——————————
上面的 prev = node; //这个相等,不就是俩个对象都指向同一个地址:都是101, "圆圆"吧。 如果node的值变动,prev也会跟着变动吧。 为什么 他俩的值不一样,node = node.next之后,node 指向(102, "方方"); 而prev 还是指向圆圆。 展开
删除id为102的节点
第(1)种算法:
Monkey m1 = new Monkey(101, "圆圆");
Monkey m2 = new Monkey(102, "方方");
Monkey m3 = new Monkey(103, "角角");
Monkey m4 = new Monkey(104, "朱朱");
m1.next = m2;
m2.next = m3;
m3.next = m4;
m4.next = null;
// 创建一个假节点,作为链表的头节点
Monkey head = new Monkey(0, "石猴");
head.next = m1;
Monkey node = head.next;
Monkey prev = head;
while( node != null )
{
if(node.id == 102)
{
prev.next = node.next;
break;
}
prev = node; ///问题所在。
node = node.next;
}
——————————
上面的 prev = node; //这个相等,不就是俩个对象都指向同一个地址:都是101, "圆圆"吧。 如果node的值变动,prev也会跟着变动吧。 为什么 他俩的值不一样,node = node.next之后,node 指向(102, "方方"); 而prev 还是指向圆圆。 展开
1个回答
2018-09-09
展开全部
因为你访问的对象实际是对象的引用,当prev=node执行,即prev指向node当前指向的对象,第一次循环时就是指向了“圆圆”;接下来执行node=node.next,则node指向了“方方”,此时并不会对prev造成影响,prev将继续指向“圆圆”。、
你应该是把两个概念混淆了,当被改变的是对象本身的内容(而不是引用指向的对象)时,才会出现你说的那种情况。比如你在prev=node执行后把对象的字段从“圆圆”改成“XX”
你应该是把两个概念混淆了,当被改变的是对象本身的内容(而不是引用指向的对象)时,才会出现你说的那种情况。比如你在prev=node执行后把对象的字段从“圆圆”改成“XX”
追问
谢谢大神,还是有点模糊, 有没有相关概念的 详解地址,或者帮忙通俗的讲一下。
追答
我不是大神,我也是小白,大家一起学习哈。
我觉得其实你自己也说了嘛,prev呀node这些对象的引用就是一个地址,而对象就是这个地址里装的东西,这两个东西是可以相对独立改变的。
我试着把对象比作房间,引用记录的就是房间的地址。
prev=node就是把prev里的地址改写成了和node里装着的地址一样,这时你同过prev通过node找到的房间是同一个,里面的东西自然也是一样的,都是圆圆。
而下一句node = node.next;则是把node里装的地址覆盖为了原来node.next里装的地址,而用这个地址你找到的是装着“方方”的那个房间。
而此时,prev里装的地址并没有被改变,还是“圆圆”那个房间的地址。
如果还不清楚可以自己百度一下关键字 java 对象 引用之类的,应该能找到不少文章。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询