一个关于linkList的问题,请教高手解答疑惑

yanjianbin2 2014-02-13 03:06:42
先看代码,如下:
package 数组;

public class LinkedList<T> {

private static class Node<T> {
T data;
Node<T> next;

Node(T data, Node<T> next) {
this.data = data;
this.next = next;
}
Node(T data) {
this(data, null);
}
}

private Node<T> head, tail;

public LinkedList() {
head = tail = null;
}

/**
* judge the list is empty
*/
public boolean isEmpty() {
return head == null;
}

/**
* 输出链表的所有序列的值
*/
public void traverse() {
if (isEmpty()) {
System.out.println("null");
} else {
for (Node<T> p = head; p != null; p = p.next)
System.out.println(p.data);

}
}

/**
* 插入链表的值从链表的最后一个序列开始
*/
public void addFromTail(T item) {
Node<T> newNode = new Node<T>(item);
Node<T> p = null;
if (!isEmpty()){
for ( p = head; p != null; p = p.next){
if(p.next == null){
/*这里出现了一个情况,当走完p.next = newNode的时候,p的值居然已经跟 head同步了,完全不用走 head = p这样的代码
* */
p.next = newNode;
break;
}
}
}else{
p = newNode;
head = p;
}
}


public static void main(String args[]){
LinkedList<String> test = new LinkedList<String>();
test.addFromTail("yan");
test.addFromTail("li");
test.addFromTail("yu");
test.traverse();
}
}

我的疑问在53行中说了,怎么都没弄明白,我明明没有对head进行赋值,最后的结果却是打印head的时候,可以将所有插入的值都打印出来
...全文
181 7 打赏 收藏 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
yanjianbin2 2014-02-14
  • 打赏
  • 举报
回复
已验证。song_1990的解释是合理的
乔巴大大 2014-02-14
  • 打赏
  • 举报
回复
断点调试下 可以看出 前一个的new Node<T>(item).next 都是下一个的new Node<T>(item),如果把new出来的Node对象比作一个圆圈,第一个圆圈是最大的以后每个圆圈都是画在上一个圆圈里面的嵌套关系
乔巴大大 2014-02-14
  • 打赏
  • 举报
回复
引用 3 楼 kanorl 的回复:
第一次addFromTail()走的是else
同意 if(!isEmpty())为false自然是走的else,然后就是把new Node赋给了head啊
yanjianbin2 2014-02-13
  • 打赏
  • 举报
回复
引用 1 楼 song_1990 的回复:
for ( p = head; p != null; p = p.next) 这里p=head,这是把head的对象引用赋值给p,就也就是对象head的地址值给了p,p发生改变,head值也会变了
这种解释很合理,但是验证上我暂且无法验证
kanorl 2014-02-13
  • 打赏
  • 举报
回复
第一次addFromTail()走的是else
卡卡吉利 2014-02-13
  • 打赏
  • 举报
回复
引用 1 楼 song_1990 的回复:
for ( p = head; p != null; p = p.next) 这里p=head,这是把head的对象引用赋值给p,就也就是对象head的地址值给了p,p发生改变,head值也会变了
+1
song_wl 2014-02-13
  • 打赏
  • 举报
回复
for ( p = head; p != null; p = p.next) 这里p=head,这是把head的对象引用赋值给p,就也就是对象head的地址值给了p,p发生改变,head值也会变了
【期刊论文复现】多元宇宙算法求解电力系统多目标优化问题(Matlab实现)内容概要:本文复现了期刊论文中提出的多元宇宙算法(Multi-Verse Optimizer, MVO)用于求解电力系统中的多目标优化调度问题,采用Matlab进行代码实现。该算法受宇宙中黑洞、白洞和虫洞等天文现象启发,通过数学建模模拟多目标搜索过程,具有较强的全局寻优能力和收敛性能。文中将其应用于典型的电力系统经济调度场景,如考虑燃料成本、排放量等多个优化目标的微电网或多能源系统调度问题,通过构建合理的数学模型和约束条件,实现对多个冲突目标的协同优化。同时,文章提供了完整的代码框架与仿真结果,便于读者理解和复现。; 适合人群:具备一定Matlab编程基础和优化算法基础知识的研究生、科研人员及从事电力系统优化调度工作的工程师。; 使用场景及目标:①学习和掌握新型智能优化算法——多元宇宙算法的基本原理与实现方法;②将其应用于电力系统经济调度、微电网优化、多目标决策等领域的模型求解;③为科研工作提供可复现的代码参考和技术支持。; 阅读建议:建议读者结合Matlab代码逐行理解算法实现细节,重点关注目标函数建模、约束处理及MVO算法核心迭代逻辑,并尝试在不同测试系统中进行参数调优与性能对比,以深入掌握其应用技巧。
内容概要:本文针对计及光伏波动性的主动配电网有功无功协调优化问题,提出一种基于多目标粒子群优化算法(MOPSO)的协同优化方案,并通过Matlab代码实现仿真验证。研究充分考虑光伏发电的随机性与间歇性特征,构建了一个综合有功功率调节、无功功率补偿、电压质量提升及网络损耗最小化的多目标优化模型,旨在提升高渗透率光伏接入下主动配电网的运行稳定性与经济性。通过优化算法求解实现有功与无功资源的协调调度,有效缓解因光伏出力波动引起的电压越限与潮流分布不均等问题,增强了系统的调节能力与鲁棒性。; 适合人群:具备电力系统分析基础和Matlab编程能力的科研人员,以及电气工程、自动化等相关专业的研究生和高年级本科生。; 使用场景及目标:①用于研究高比例可再生能源接入背景下主动配电网的优化运行策略;②为电力系统仿真教学与科研提供可复现的算法模型与代码实例,目标是掌握多目标智能优化算法在电力系统优化调度中的建模方法、实现流程及其工程应用价值。; 阅读建议:建议读者结合Matlab代码逐段理解算法实现细节,重点关注目标函数的设计、约束条件的处理方式以及粒子群算法的改进策略,同时可通过调整参数设置、测试不同场景以深入理解优化机制与系统响应特性。

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧