/* Trouve dans une liste chaînée triée le premier nœud dont le champ Value est supérieur ou égal à une valeur clé, puis retourne le pointeur sur le nœud qui le précède (pour faciliter l'insertion ou la suppression), ou bien un pointeur NULL si aucune valeur n'est trouvée Suppose que la liste se termine par un nœud de queue sentinelle Contenant la valeur la plus grande pour le champ Value et pointant sur lui-même. */ #include #include "llist.h" struct LinkNode *FindNodeBeforeValueNotLess( struct LinkNode *HeadOfListNode, int SearchValue) { struct LinkNode *NodePtr = HeadOfListNode; while (NodePtr->NextNode->Value < SearchValue) NodePtr = NodePtr->NextNode; if (NodePtr->NextNode->NextNode == NodePtr->NextNode) return(NULL); /*nous avons trouvé la sentinelle; la recherche a échoué */ else return(NodePtr); /*nous avons réussi; retour du pointeur sur le nœud précédant qui était >= */ }