在链表类class liste 进行遍历的时候(不是为了遍历,但是addlast要经过遍历找到链表尾),如下程序:
public void addLast(int key){
Element node=new Element(key);
Element current=head;
if (head==null){
head=node;
return;
}
while (current.getNext()!=null){
current=current.getNext();
}
current.setNext(node);
}
其中对current=current.getNext();这句话有些疑问。
首先Element current=head;是表明了对current这个变量并没有分配新的空间,而是指向了head所指的空间是吗?
那么在current=current.getNext();这句话中,current被赋予了新的值,但是为什么head的值并没有发生改变呢?
从程序的运行结果来看,addlast这个函数的确可以正常完成它的功能,所以我觉得很奇怪,在这里的参数传递机制到底是怎么样的?难道是因为current是局部变量的关系,所以current改变的时候,head却不会跟着变化?如果head不会随current的赋值变化而变化,那么最后一句current.setNext(node);岂不是不能完成在链表尾插入数据的功能了?百思不得其解,请诸位解答!
附class Element的代码:
public class Element {
private int key;
private Element next;
public Element(int key){
this.key=key;
}
public Element(int key,Element next){
this.key=key;
this.next=next;
}
public int getKey() {
return key;
}
public void setKey(int key) {
this.key = key;
}
public Element getNext() {
return next;
}
public void setNext(Element next) {
this.next = next;
}
@Override
public String toString() {
return "(" + key + ")";
}
}
关于java的链表地址指向的问题
答案:2 悬赏:60 手机版
解决时间 2021-04-14 14:26
- 提问者网友:半生酒醒
- 2021-04-14 03:09
最佳答案
- 五星知识达人网友:醉吻情书
- 2021-04-14 04:27
在java中 比如,String str1 ="abc",在虚拟机内会开辟一段空间存放“abc”,但是你再次给 str1赋值,str1就会只想新开辟存储的空间的位置,而原来abc的位置,在不被使用的情况先会被java回收机制清空。如你说的,开始 current =head,但是并有head=XX的动作,说明没有给head赋值,所以head不会变,而一直有current赋值,所以current一直指向新的空间,而这些是与head无关的动作。PS: 下面代码太长没看
全部回答
- 1楼网友:夜风逐马
- 2021-04-14 04:45
1. position.link 当前指向节点的下一个节点地址
2. new listnode(newdata, position.link); 下一个节点地址给了新数据,也就是说,将新数据里面存得下一个节点的地址改成当前节点的下一个节点地址。
3. position.link = new什么什么 新数据的地址给了当前地址的记录下一个节点地址变量。
链表存得不应该是自己得地址吧 否则还怎么链。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯