Problème de Remove dans une Linked List et fonction récursive
Bonjour, voici le problème:
Je veux enlever l'élément M de la liste L sachant que L est une liste de ModuleTree, c'est à dire une structure arborescente définie comme suit:
Code:
1 2 3 4 5 6
|
class ModuleTree{
boolean leaf = false;
LinkedList children=new LinkedList();
String label="";
Vertex representant=null; |
Donc L ressemble à ça :
Citation:
[ (111 : CDC12), (270 : BNI4), * (|| ( (770 : SHS1) (1 : YDL225W)) (17 : CDC11) (803 : GIN4) (723 : CDC3)), (438 : NFI1), (677 : CDC10)]
Ci dessus par exemple on veut enlever le module ||(770 : SHS1) (1 : YDL225W)), il faut donc faire une fonction récursive. Voilà à quoi j'ai pensé :
Code:
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
|
public static LinkedList listeSansM(LinkedList L, ModuleTree M){
for(Iterator IT=L.iterator();IT.hasNext(); ){
ModuleTree Mtmp = (ModuleTree) IT.next();
System.out.println("Mtmp : "+Mtmp.toString());
System.out.println("M : "+M.toString());
System.out.println("L= "+L.toString());
if(Mtmp.equals(M))
{
L.remove(M);
}else{
System.out.println("Mtmp.isLeaf?"+Mtmp.toString()+" : "+Mtmp.isLeaf());
if(!Mtmp.isLeaf()){
LinkedList Ltmp=Mtmp.getChildren();
System.out.println("enfant : "+Ltmp.toString());
listeSansM(Ltmp,M);
}
}
}
System.out.println("Lfinal= "+L.toString());
return L;
} |
Mais ça semble boucler, voilà l'affichage que j'obtiens jusqu'à l'erreur :
Citation:
Mtmp : (111 : CDC12)
M : || ( (770 : SHS1) (1 : YDL225W))
L= [ (111 : CDC12), (270 : BNI4), * (|| ( (770 : SHS1) (1 : YDL225W)) (17 : CDC11) (803 : GIN4) (723 : CDC3)), (438 : NFI1), (677 : CDC10)]
Mtmp.isLeaf? (111 : CDC12) : true
Mtmp : (270 : BNI4)
M : || ( (770 : SHS1) (1 : YDL225W))
L= [ (111 : CDC12), (270 : BNI4), * (|| ( (770 : SHS1) (1 : YDL225W)) (17 : CDC11) (803 : GIN4) (723 : CDC3)), (438 : NFI1), (677 : CDC10)]
Mtmp.isLeaf? (270 : BNI4) : true
Mtmp : * (|| ( (770 : SHS1) (1 : YDL225W)) (17 : CDC11) (803 : GIN4) (723 : CDC3))
M : || ( (770 : SHS1) (1 : YDL225W))
L= [ (111 : CDC12), (270 : BNI4), * (|| ( (770 : SHS1) (1 : YDL225W)) (17 : CDC11) (803 : GIN4) (723 : CDC3)), (438 : NFI1), (677 : CDC10)]
Mtmp.isLeaf?* (|| ( (770 : SHS1) (1 : YDL225W)) (17 : CDC11) (803 : GIN4) (723 : CDC3)) : false
enfant : [|| ( (770 : SHS1) (1 : YDL225W)), (17 : CDC11), (803 : GIN4), (723 : CDC3)]
Mtmp : || ( (770 : SHS1) (1 : YDL225W))
M : || ( (770 : SHS1) (1 : YDL225W))
L= [|| ( (770 : SHS1) (1 : YDL225W)), (17 : CDC11), (803 : GIN4), (723 : CDC3)]
Ca serait le remove qui ne passe pas ? Me suis-je plantée dans ma récursion ?
Merci pour vos remarques et solutions que vous pourrez m'apporter...