我刚刚开始学习LinkedLists和节点,我对此代码中的内容并不了解:¸
public class ListeChainee<E> {
private Noeud debut=null;
private Noeud fin=null;
private int taille=0;
private class Noeud
{
private E contenu;
private Noeud suivant;
Noeud(E contenu, Noeud suivant)
{
this.contenu=contenu;
this.suivant=suivant;
}
}
public boolean add(E element)
{
Noeud n= new Noeud(element,null);
if(taille==0)
debut= n;
else
fin.suivant=n;
fin=n;
taille++;
return true;
}
在我的班级,我有这个:
ListeChainee<Integer> liste= new ListeChainee<Integer>();
liste.add(2);
liste.add(3);
我试图理解为什么当我做“liste.add(3)”时,debut.suivant会改变? 谢谢你的帮助
答案 0 :(得分:1)
当你添加2时,它是列表中的第一个节点,因此首次亮相。但它没有继承者,因此suivant是无效的。
当你添加3时,2需要指向3,所以2的suivant链接指向3.它恰好是因为2是第一个节点,你在debut.suivant中看到这个变化,作为首次亮相和fin在这一点上是相同的节点。
答案 1 :(得分:0)
debut.suivant会发生变化。因为当列表包含单个Noeud时,debut和fin引用相同的Noeud,因此在add方法中,当添加第二个节点时,fin.suivant = n相当于debut.suivant = n。
考虑下面的代码行来理解为什么debut == fin为列表中的第一个Noede:
if(taille==0)
debut= n;
...
fin=n;
debut和fin都分配了n,因此当在第二个添加中更改fin.suivant时,debut.suivant也是如此。