1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
| public class ListeChainee<T extends Comparable> implements ADTListe<T> {
private Noeud<T> tete;
private Noeud<T> fin;
private int nbElements;
ListeChainee() {
tete = new Noeud<T>();
}
ListeChainee(T element) {
this();
fin = new Noeud<T>(element);
fin.majSuivant(tete);
tete = fin;
nbElements = 1;
}
/**
* Verification si la liste contient ou non des élements
* @return true si la liste est vide, sinon false
*/
public boolean estVide () {
return (nbElements == 0);
}
/**
* Retirer tous les élements de la liste. La liste sera vide
*
*/
public void viderListe () {
tete = fin;
nbElements = 0;
}
/**
* Retourne le nombre d'éléments de la liste
* @return Nombre d'élements (int)
*/
public int nbElements () {
return nbElements;
}
/**
* Ajoute l'élément au début de la liste
* @return la référence de l'objet inséré ou null s'il y a eu un probleme
*/
public T ajouterDebut (T element) {
Noeud<T> nouveau;
nouveau = new Noeud<T>(element);
nouveau.majSuivant(tete);
tete = nouveau;
nbElements++;
return tete.obtenirElement();
}
/**
* Ajoute l'élément à la fin de la liste
* @return la référence de l'objet inséré ou null s'il y a eu un probleme
*/
public T ajouterFin (T element) {
Noeud<T> nouveau;
nouveau = new Noeud<T>(element);
nouveau.majSuivant(fin.obtenirSuivant());
fin.majSuivant(nouveau);
fin = nouveau;
nbElements++;
return fin.obtenirElement();
}
/**
* Ajoute l'élément en ordre croissant (avec compareTo)
* @return la référence de l'objet inséré ou null s'il y a eu un probleme
**/
public T ajouterOrdonne (T element) {
Noeud<T> tmp = tete;
Noeud<T> precedent = null;
Noeud<T> nouveau;
while (tmp.obtenirSuivant() != null && element.compareTo(tmp.obtenirElement()) > 0) {
precedent = tmp;
tmp = tmp.obtenirSuivant();
}
if (precedent == null) {
ajouterDebut(element);
tmp = tete;
} else {
nouveau = new Noeud<T>(element);
nouveau.majSuivant(tmp);
precedent.majSuivant(nouveau);
tmp = nouveau;
nbElements++;
}
return tmp.obtenirElement();
}
} |
Partager