Bonjour,

Je fait une liste circulaire, c'est-à-dire doublement chaînée.
Je souhaite avoir les fonctionnalités suivantes:
- Lire l'élément en cours
- Se décaler sur l'élément suivant
- Ajouter / Supprimer un élément
- Calculer la longueur de la liste
- Rechercher la présence d'un élément dans la liste

Voici ce que j'ai fait. Pouvez-vous me dire si c'est correct et je bloque pour la recherche d'un élément dans la liste
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
public class CelluleCirculaire<X> {
	private X valeur;
	private CelluleCirculaire<X> celluleSuivante;
	private CelluleCirculaire<X> cellulePrecedente;
 
	//Creation d’une cellule contenant la valeur n
	CelluleCirculaire(X n){
		this.valeur = n;
		this.celluleSuivante = null;
		this.cellulePrecedente = null;
	}
 
	public X getValeur() {
		return valeur;
	}
 
	public void setValeur(X valeur) {
		this.valeur = valeur;
	}
 
	public CelluleCirculaire<X> getCelluleSuivante() {
		return celluleSuivante;
	}
 
	public void setCelluleSuivante(CelluleCirculaire<X> celluleSuivante) {
		this.celluleSuivante = celluleSuivante;
	}
 
	public CelluleCirculaire<X> getCellulePrecedente() {
		return cellulePrecedente;
	}
 
	public void setCellulePrecedente(CelluleCirculaire<X> cellulePrecedente) {
		this.cellulePrecedente = cellulePrecedente;
	}
}
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
public class ListeCellulesCirculaire<X>{
	private CelluleCirculaire<X> debut;
 
	//Liste vide
	ListeCellulesCirculaire(CelluleCirculaire<X> debut){
		this.debut = debut;
	}
 
    public void ajouterDebut(CelluleCirculaire<X> cellule){
		cellule.setCelluleSuivante(this.debut);
		if(this.debut != null)
			debut.setCellulePrecedente(cellule);
		debut = cellule;
		cellule.setCellulePrecedente(null);
    }
 
    public void ajouterApres(CelluleCirculaire<X> precedent, CelluleCirculaire<X> cellule){
    	if(precedent == null){
    		ajouterDebut(cellule);
    	}else{
    		cellule.setCelluleSuivante(precedent.getCelluleSuivante());
    		cellule.setCellulePrecedente(precedent);
    		if(precedent.getCelluleSuivante() != null){
    			precedent.getCelluleSuivante().setCellulePrecedente(cellule);
    		}
    		precedent.setCelluleSuivante(cellule);
    	}
    }
 
    public void supprimer(CelluleCirculaire<X> cellule){
    	if(cellule == debut){
    		debut = cellule.getCelluleSuivante();
    	}else{
    		//cas cellule précédente n'est pas null
    		cellule.getCellulePrecedente().setCelluleSuivante(cellule.getCelluleSuivante());
    	}
    	if(cellule.getCelluleSuivante() != null){
    		cellule.getCelluleSuivante().setCellulePrecedente(cellule.getCellulePrecedente());
    	}
    }
 
	//Renvoie la longueur de la liste
	public int longueur(){
		int longueur = 0;
		CelluleCirculaire<X> c = this.debut;
		while (c!=null) {
			longueur = longueur + 1;
			c = c.getCelluleSuivante();
		}
		return longueur;
	}
 
	//Renvoie une chaîne de caractères représentant la liste
	public String toString(){
		String s = "[";
		CelluleCirculaire<X> c = this.debut;
		while (c!=null) {
			s = s + c.getValeur();
			c = c.getCelluleSuivante();
			if (c!=null) s = s +"; ";
		}
		s = s + "]";
		return s;
	}
 
	public CelluleCirculaire<X> getDebut() {
		return debut;
	}
 
	public void setDebut(CelluleCirculaire<X> debut) {
		this.debut = debut;
	}
}
Merci de votre aide