2016-08-09 47 views
0

Ich benutze C schrieb eine SortedInsert() -Funktion, um einen neuen Knoten in eine gegebene Liste einzufügen, die in aufsteigender Reihenfolge sortiert ist. Mein Code von SortedInsert() Funktion ist folgende:Verknüpfte Liste SortedInsert() -Funktion

#include <stdio.h> 
#include <stdlib.h> 
#include <assert.h> 


struct node 
{ 
    int data; 
    struct node *next; 
}; 

void push(struct node** head, int data_new) { 
    struct node* headNode; 
    headNode = (node*)malloc(sizeof(struct node)); 
    headNode->data = data_new; 
    headNode->next = *head; 
    *head = headNode; 
} 

struct node* BuildFunny() { 
    struct node*head = NULL; 
    push(&head, 2); 
    push(&head->next, 3); 
    push(&head->next->next, 8); 
    push(&head->next->next->next, 10); 
    push(&head->next->next->next->next, 15); 
    head->next->next->next->next->next = NULL; 

    return head; 
} 

void SortedInsert(struct node** headRef, struct node* newNode){ 
    if (*headRef == NULL || (*headRef)->data >= newNode->data){ 
     newNode->next = *headRef; 
     *headRef = newNode; 
    } 
    else { 
     struct node* current; 
     current = *headRef; 
     while (current->next->data <= newNode->data && current->next != NULL){ 
      current = current->next; 
     } 
     newNode->next = current->next; 
     current->next = newNode; 
    } 
} 

Die Hauptfunktion ist:

int main() 
{ 
    struct node* head; 
    head = BuildFunny(); 
    struct node* newNode = (struct node*)malloc(sizeof(struct node)); 
    newNode->data = 1; 
    newNode->next = NULL; 
    SortedInsert(&head, newNode); 

    struct node* newNode1 = (struct node*)malloc(sizeof(struct node)); 
    newNode1->data = 6; 
    newNode1->next = NULL; 
    SortedInsert(&head, newNode1); 

    /* 
    struct node* newNode2 = (struct node*)malloc(sizeof(struct node)); 
    newNode2->data = 20; 
    newNode2->next = NULL; 
    SortedInsert(&head, newNode2); 
    */ 

    while(head != NULL){ 
     printf("%d ", head->data); 
     head = head->next; 
    } 


    return 0; 
} 

Das Problem ist, I korrekt Nummer 1 und 6 in die Liste mit richtigen Reihenfolge einfügen kann jedoch Nummer 20 gibt mir immer einen Fehler (unkommentiertes newNode2 gibt einen Fehler). Ich habe keine Ahnung, warum ich keine Nummer über 15 in meine Liste einfügen kann. Könnte mir jemand helfen Zahlen zu machen, die über 15 auch am Ende der Liste einfügen können?

+0

"gibt Fehler". Es würde helfen, wenn Sie uns tatsächlich sagen würden, was der Fehler ist. Ist es ein Kompilierungsfehler? Ein Laufzeitfehler? Und was sind die Fehlermeldungen wenn überhaupt? – kaylum

Antwort

1

Könnte sein Problem ist, mit diesem Zustand

while (current->next->data <= newNode->data && current->next != NULL) 

ändert es für NULL vor

while (current->next != NULL && (current->next->data <= newNode->data)) 

mit Ihrem Code zu überprüfen, wenn current->next ist NULL es wird die erste Bedingung versuchen, die beziehen NULL Zeiger verursacht Probleme. So erhalten Sie ein Problem, wenn Sie eine höhere Nummer als bestehende Nummern in der Liste hinzufügen.