2016-04-13 10 views
-1

Ich habe eine static linkedList mergeSort (linkedList one) Methode implementiert, die eine LinkedList rekursiv sortiert und funktioniert.display() - Funktion verursacht Laufzeitfehler

Hier ist die Methode, die in meinem linkedList.h definiert:

linkedList linkedList::mergeSort(linkedList& one) 
{ 
    if (one.head->next == NULL) 
    { 
     return one; 
    } 
    else 
    { 
     linkedList right; 
     linkedList::split(one, right); 
     right = mergeSort(right); 
     one = mergeSort(one); 
     linkedList sort; 
     linkedList::merge(one, right, sort); 
     one = sort; 
     return one; 
    } 
} 

Wenn ich es zeigen, es richtig auf dem Bildschirm ausgibt, so weiß ich, es funktioniert, aber wenn die linkedList ist größer als 4505 Knoten, es wird nicht gedruckt. Ich debuggte, um zu überprüfen, wo das Problem lag. Anscheinend ist es in meiner Anzeigefunktion, aber ich sehe nichts falsch damit.

Hier ist sie:

void display(node * p) 
{ 
    if (p == NULL) 
    { 

    } 
    else 
    { 
     cout << p->data << " "; 
     display(p->next); 
    } 
} 

Das Problem ist nicht auf cout << p->data << " "; wies

Kann mir jemand in die richtige Richtung auf Sie, wie dieses Problem beheben? (Wenn es überhaupt repariert werden kann.) Jede Hilfe würde sehr geschätzt werden.

+0

eine rekursive Funktion 4505 Es ist keine gute Idee – Pooya

Antwort

0

Statt eine rekursive Funktion für 4505 Zeiten des Aufrufs, der Code mit while-Schleife implementieren:

void display(node * p) 
{ 
    while(p != NULL) 
    { 
     cout<<p->data<<" "; 
     p = p->next; 
    } 
} 
+0

Terminal aufrufen werde wie Sie besser mit einem 'endl' nach der Schleife – GeoffreyB

+0

@GeoffreyB ist, wie OP in seinem Code implementiert und ich habe das bewahrt, aber völlig mit Ihnen einverstanden – Pooya