关于链表的一个问题

XVenus 2007-09-02 03:08:15
程序有点长,但很简单,就是一个普通的链表。
请问程序中的
end.next = newEnd;
end = newEnd;
这两条语句有什么用处?第二条没有看懂~~


public class LinkedList {

public LinkedList() {
}

public LinkedList(Object[] items){
if (items != null){
for (int i = 0; i < items.length; i++){
addItem(items[i]);
}
current = start;
}
}

public void addItem(Object item){
ListItem newEnd = new ListItem(item);
if (start == null){
start = end = newEnd;
} else {
end.next = newEnd;
end = newEnd;
}
}

public Object getFirst(){
current = start;
return start == null ? null : start.item;
}

public Object getNext(){
if (current != null){
current = current.next;
}
return current == null ? null : current.item;
}

private ListItem start = null;
private ListItem end = null;
private ListItem current = null;
private class ListItem {
public ListItem(Object item){
this.item = item;
next = null;
}

public String toString(){
return "ListItem" + item;
}

ListItem next;
Object item;
}
}
...全文
196 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
zephyr_cc 2007-09-02
  • 打赏
  • 举报
回复
你在纸上画一排格子...
每个格子分成两半,上面一半是存的item,下面一半是next
然后将第一个格子的next连到第二个格子的item上...其余的都这么做.
这个时候最后一个格子的next谁都没有指,是null.
然后画个箭头,指向最后一个格子,把箭头标上end.那么end的next也就是空的...

ListItem newEnd = new ListItem(item);
这句表示:在最后面再画个同样的格子这个格子叫newEnd.
此时这个newEnd的next是null

end.next = newEnd;
这句表示:把end指的那个格子的next指向这个newEnd

end = newEnd;
这句表示:把end这个箭头指向newEnd这个格子

这时候新的元素添加完了,样子和原来没什么区别,只不过多了一个元素,而end那个箭头还是指向这个链表的最后一个.end的next还是null
XVenus 2007-09-02
  • 打赏
  • 举报
回复
不好意思,还是没有确切的理解。麻烦您再解答一下,谢谢

一开始没有进行这两条语句之前:
end.next = null;

进行完第一条语句:
end.next = newEnd;

进行完第二条语句:
end.next = null;

这样一来还是没明白end.next = newEnd这句话作了什么?
zephyr_cc 2007-09-02
  • 打赏
  • 举报
回复
你不是要加一个Listitem的对象进去嘛...
"链表"顾名思义,表中的元素都是靠链接来关联的.
这里是加在结尾加入新元素,而现在链表中的结尾是end.
很自然的将end的next指向新加进来的元素(newEnd)的就可以了.
这就是end.next = newEnd
然后你要告诉链表,这个newEnd变成了结尾
这就是end = newEnd;

说实话newEnd不如改叫newItem...
XVenus 2007-09-02
  • 打赏
  • 举报
回复
那么end.next = newEnd;这句话有什么用呢?
zephyr_cc 2007-09-02
  • 打赏
  • 举报
回复
这是ListItem类的构造方法
public ListItem(Object item){
this.item = item;
next = null;
}
在addItem方法中
ListItem newEnd = new ListItem(item);后
这个newEnd的next是null.
end = newEnd;后
end.next也就是null
XVenus 2007-09-02
  • 打赏
  • 举报
回复
那这样操作以后end.next的值是什么呢?
sszhangy 2007-09-02
  • 打赏
  • 举报
回复
增加链表长多。

始终让end指向链表的末尾,使得在此增加长度时也这样操作.
zephyr_cc 2007-09-02
  • 打赏
  • 举报
回复
就是楼上的意思
链表这东西用手画画图就很好理解了~
zapdos 2007-09-02
  • 打赏
  • 举报
回复
将结尾的next连到newEnd上
再将newEnd指定为结尾
zapdos 2007-09-02
  • 打赏
  • 举报
回复
将结尾的end连到newEnd上
再将newEnd指定为结尾

62,623

社区成员

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

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