diff --git a/src/joueurList.c b/src/joueurList.c
index 27bf65b6015264ba2bc59f54afe92eb57c706a10..3b9a34fa888f4d2927c01da50a2a47f3c2f9cf54 100644
--- a/src/joueurList.c
+++ b/src/joueurList.c
@@ -92,9 +92,34 @@ int emptyJoueurList(ListJoueur * l){
  */
 int outOfJoueurList(ListJoueur * l){
     if(!emptyJoueurList(l)){
-        if(l->currentNodeJoueur==l->lastNodeJoueur){
-            return 1;
-        }
+        return (l->currentNodeJoueur==l->lastNodeJoueur);
+    }
+    return 0;
+}
+
+/*!
+ * \fn int isFirstJoueurList(ListJoueur * l)
+ * \brief La fonction teste si le NodeJoueur courant est le premier de la liste.
+ *
+ * \param La ListJoueur a tester
+ * \return 1 si le NodeJoueur courant est le premier de la liste, 0 sinon
+ */
+int isFirstJoueurList(ListJoueur * l){
+    if(!emptyJoueurList(l)){
+        return (l->currentNodeJoueur==l->firstNodeJoueur);
+    }
+    return 0;
+}
+
+/*!
+ * \fn int isNextNodeJoueurList(ListJoueur * l, NodeJoueur * n)
+ * \brief La fonction teste si le NodeJoueur en parrametre est le NodeJoueur suivant le NodeJoueur courant.
+ * \param La ListJoueur et le NodeJoueur a tester.
+ * \return 1 si le NodeJoueur en parrametre est le NodeJoueur suivant le NodeJoueur courant, 0 sinon.
+ */
+int isNextNodeJoueurList(ListJoueur * l, NodeJoueur * n){
+    if(!emptyJoueurList(l)){
+        return (l->currentNodeJoueur->next==n);
     }
     return 0;
 }
@@ -151,6 +176,8 @@ int addNodeJoueurFirst(ListJoueur * l, NodeJoueur * j){
         if (l!=NULL){
             if (emptyJoueurList(l)){
                 l->firstNodeJoueur=j;
+                l->currentNodeJoueur=j;
+                l->lastNodeJoueur=j;
                 return 1;
             }
             else{
@@ -182,8 +209,130 @@ int addNodeJoueurLast(ListJoueur * l, NodeJoueur * j){
     return 0;
 }
 
-int deleteCurrentNodeJoueur(ListJoueur * l);
+/*!
+ * \fn deleteFirstNodeJoueur(ListJoueur * l)
+ * \brief La fonction supprime le premier NodeJoueur de la liste et libere l'espace alloue.
+ *
+ * \param La ListJoueur a modifier.
+ * \return 1 si tout s'est bien passe, 0 sinon
+ */
+int deleteFirstNodeJoueur(ListJoueur * l){
+    if(!emptyJoueurList(l)){
+        NodeJoueur * tempNodeJoueur = l->firstNodeJoueur;
+        l->firstNodeJoueur=l->firstNodeJoueur->next;
+        deleteNodeJoueur(tempNodeJoueur);
+        return 1;
+        }
+    return 0;
+}
 
-void setOnJoueur(ListJoueur * l, Joueur * j);
+/*!
+ * \fn deleteLastNodeJoueur(ListJoueur * l)
+ * \brief La fonction supprime le dernier NodeJoueur de la liste et libere l'espace alloue.
+ *
+ * \param La ListJoueur a modifier.
+ * \return 1 si tout s'est bien passe, 0 sinon
+ */
+int deleteLastNodeJoueur(ListJoueur *l){
+    if(!emptyJoueurList(l)){
+        if(l->firstNodeJoueur==l->lastNodeJoueur){
+            return deleteFirstNodeJoueur(l);
+        }
+        else{
+            NodeJoueur * tempNodeJoueur=l->lastNodeJoueur;
+            setOnFirstJoueur(l);
+            while(!isNextNodeJoueurList(l,l->lastNodeJoueur)){
+                nextJoueur(l);
+            }
+            l->currentNodeJoueur=l->lastNodeJoueur;
+            l->currentNodeJoueur->next=NULL;
+            deleteNodeJoueur(tempNodeJoueur);
+            return 1;
+        }
+    }
+    return 0;
+}
+
+/*!
+ * \fn deleteCurrentNodeJoueur(ListJoueur * l)
+ * \brief La fonction supprime le NodeJoueur courant de la liste et libère l'espace alloue.
+ *
+ * \param La ListJoueur a modifier.
+ * \return 1 si tout s'est bien passe, 0 sinon
+ */
+int deleteCurrentNodeJoueur(ListJoueur * l){
+    if(isFirstJoueurList(l)){
+        return deleteFirstNodeJoueur(l);
+    }
+    else if(outOfJoueurList(l)){
+        return deleteLastNodeJoueur(l);
+    }
+    else if(!emptyJoueurList(l)){
+        NodeJoueur * tempNodeJoueur=l->currentNodeJoueur;
+        setOnFirstJoueur(l);
+        while(!isNextNodeJoueurList(l,tempNodeJoueur)){
+            nextJoueur(l);
+        }
+        l->currentNodeJoueur->next=tempNodeJoueur->next;
+        deleteNodeJoueur(tempNodeJoueur);
+        return 1;
+    }
+    return 0;
+}
 
-int deleteNodeJoueurFromList(ListJoueur * l, Joueur * j);
+/*!
+ * \fn void setOnJoueur(ListJoueur * l, Joueur * j)
+ * \brief La fonction positionne le NodeJoueur courant sur le NodeJoueur possedant la valeur Joueur.
+ *
+ * \param La ListJoueur a modifier, la valeur de Joueur a trouver.
+ */
+void setOnJoueur(ListJoueur * l, Joueur * j){
+    if(!emptyJoueurList(l)){
+        setOnFirstJoueur(l);
+        while(j!=getCurrentJoueur(l)){
+            nextJoueur(l);
+        }
+    }
+}
+
+/*!
+ * \fn int deleteNodeJoueurFromList(ListJoueur * l, Joueur * j)
+ * \brief La fonction efface le NodeJoueur contenant le Joueur en parrametre et libere l'espace alloue en memoire.
+ *        Elle repositione la valeur courante sur le NodeJoueur courant avant l'appel de la fonction.
+ *        Si la valeur a supprimmer est la valeur courante avant l'appel de la fonction, elle positionne la valeur courante sur le NodeJoueur suivant.
+ *        Si la valeur a supprimer est le derniere NodeJoueur de la liste, la valeur courante est placee sur le premier NodeJoueur.
+ * \param La ListJoueur a modifier, la valeur de Joueur a supprimer.
+ * \return 1 si tout c'est bien passe, 0 sinon.
+ */
+int deleteNodeJoueurFromList(ListJoueur * l, Joueur * j){
+    int i;
+    if(!emptyJoueurList(l)){
+        if(j==getCurrentJoueur(l)){
+            i=deleteCurrentNodeJoueur(l);
+            nextJoueur(l);
+            return i;
+        }
+        else{
+            NodeJoueur * tempCurrent=l->currentNodeJoueur;
+            setOnFirstJoueur(l);
+            while((getCurrentJoueur(l)!=j)&&(!outOfJoueurList(l))){
+                if(outOfJoueurList(l)){
+                    if(getCurrentJoueur(l)!=j){
+                        return 0;
+                    }
+                    else{
+                        i=deleteLastNodeJoueur(l);
+                        setOnFirstJoueur(l);
+                        return i;
+                    }
+                }
+                else{
+                    i=deleteCurrentNodeJoueur(l);
+                    l->currentNodeJoueur=tempCurrent;
+                    return i;
+                }
+            }
+        }
+    }
+    return 0;
+}
diff --git a/src/joueurList.h b/src/joueurList.h
index b5e36cead91fa2615362a4e97bfbd1431e7e88ad..d14e272cdb48fe5dbc2762093e59c051d652e539 100644
--- a/src/joueurList.h
+++ b/src/joueurList.h
@@ -20,6 +20,8 @@ void printJoueurList(ListJoueur * l);
 
 int emptyJoueurList(ListJoueur * l);
 int outOfJoueurList(ListJoueur * l);
+int isFirstJoueurList(ListJoueur * l);
+int isNextNodeJoueurList(ListJoueur * l,NodeJoueur * n);
 
 void setOnFirstJoueur(ListJoueur * l);
 void nextJoueur(ListJoueur * l);
@@ -27,6 +29,8 @@ Joueur * getCurrentJoueur(ListJoueur * l);
 
 int addNodeJoueurFirst(ListJoueur * l, NodeJoueur * j);
 int addNodeJoueurLast(ListJoueur * l, NodeJoueur * j);
+int deleteFirstNodeJoueur(ListJoueur * l);
+int deleteLastNodeJoueur(ListJoueur *l);
 int deleteCurrentNodeJoueur(ListJoueur * l);
 
 void setOnJoueur(ListJoueur * l, Joueur * j);