2016-04-13 2 views
-1

Я внедрил метод static linkedList mergeSort (linkedList one), который рекурсивно сортирует связанныйList и работает.Функция display() вызывает ошибку времени выполнения

Вот метод, который определен в моем linkedList.h:

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; 
    } 
} 

Когда я показываю, он печатает правильно на экране, так что я знаю, что это работает, но если linkedList больше чем 4505 узлов, его не будет печатать. Я отлаживал, чтобы проверить, где проблема. По-видимому, это в моей функции отображения, но я не вижу в этом ничего плохого.

Здесь:

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

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

Проблема указывает на cout << p->data << " ";

Может кто-то пожалуйста, мне точку в правильном направлении, о том, как это исправить? (Если он может быть исправлен вообще.) Любая помощь будет очень признательна.

+0

вызывающей рекурсивную функцию 4505 время не является хорошей идеей – Pooya

ответ

0

Вместо вызова рекурсивной функции для 4505 раз, реализовать свой код в то время цикла:

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

ваш терминал, как вы лучше с 'endl' после цикла – GeoffreyB

+0

@GeoffreyB это то, как OP реализован в его коде, и я сохранил это, но полностью согласен с вами – Pooya

Смежные вопросы