试图了解更多有关java中节点和链表的信息

时间:2016-11-16 01:56:28

标签: java

我刚刚开始学习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会改变? 谢谢你的帮助

2 个答案:

答案 0 :(得分:1)

当你添加2时,它是列表中的第一个节点,因此首次亮相。但它没有继承者,因此suivant是无效的。

当你添加3时,2需要指向3,所以2的suivant链接指向3.它恰好是因为2是第一个节点,你在debut.suivant中看到这个变化,作为首次亮相和fin在这一点上是相同的节点。

答案 1 :(得分:0)

执行&#34; liste.add(3)&#34;

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也是如此。