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.