2016-04-13 143 views
-1

我已經實現了一個static linkedList mergeSort (linkedList one)方法,它對一個linkedList進行遞歸排序並工作。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次遞歸函數,用while循環實現代碼:

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

終端會喜歡你用'endl'更好在循環之後 – GeoffreyB

+0

@GeoffreyB這是OP如何在他的代碼中實現的,我保留了這一點,但完全同意你的看法 – Pooya