Insérer un Nœud dans une liste Doublement chaînée Triée
Je ne suis pas en mesure de comprendre, pourquoi mon code pour l'insérer dans un triée liste doublement liée à défaut sur certains cas de test.S'il vous plaît laissez-moi savoir. Je ne sais pas du cas de test, ils sont générés par le système.
Node* SortedInsert(Node *head,int data)
{
//Complete this function
//Do not write the main method.
Node * temp = (Node*)malloc(sizeof(Node));
temp->data = data;
temp->next = NULL;
temp->prev = NULL;
if (head == NULL)
{
head = temp;
return head;
}
if (temp->data <= head->data)
{
temp->next = head;
head->prev = temp;
head = temp;
return head;
}
Node *curr = head;
while (curr->next!=NULL)
{
if (temp->data <= curr->data)
{
curr->prev->next = temp;
temp->prev = curr->prev;
temp->next = curr;
curr->prev = temp;
return head;
}
curr = curr->next;
}
curr->next = temp;
temp->prev = curr;
return head;
}
Grâce
- Vous pouvez être intéressé par la façon dont cela peut être fait en utilisant de manière significative une approche différente à l'aide d'un pointeur de pointeur de marcher sur la réelle pointeurs dans votre liste plutôt que de simplement les nœuds (des sons étranges, je sais, mais ce qui a considérablement réduit l'algorithme). Voir en direct.
- Dans le code, pourquoi est-pp un pointeur de pointeur vers le nœud? Peut pas être accompli en utilisant un pointeur vers le nœud?
- certes, la raison pour laquelle je préfère que l'algorithme est franchement en raison de sa simplicité. En fin de compte la mi-insertion dans une liste, implique la mise à jour nœud existant pointeurs. Je préfère utiliser le pointeurs dans la liste plutôt que d'avoir à gérer d'autres inutilement.
Vous devez vous connecter pour publier un commentaire.
Une fois que vous atteignez le dernier nœud, vous devriez comparer ses données avec le nouveau nœud et l'insérer en conséquence.
Si l'exécution atteint cette partie, alors, à présent curr vers le dernier nœud. Maintenant vous devriez comparer ses données comme suit:
Alternativement, vous pouvez écrire une condition if pour le nœud à la fin de la liste
Cette solution fonctionne dans tous les cas (insérer entre les, insérer, à la tête, insérer, à la fin, etc). J'essayais juste d'écrire un code sans conditions. Alors que la recherche d'une erreur, je suis tombé sur ce fil. Ne corrigez-moi si cette solution ne fonctionne pas pour certains cas de test.
Voici un peu de code pour Insérer un Nœud dans Triés Liste Doublement chaînée
Voici la programme en C++ pour l'insertion d'un nœud à la bonne position dans un classement liste doublement chaînée: