2017-10-28 120 views
-1

我有一個函數,將隨機整數插入到列表中,並顯示列表的函數。我現在有什麼,有沒有辦法顯示該列表反向?如何反轉顯示鏈接列表?

void InsertRandomInts() 
{ 
LinkedSortedList<int> list; 
srand((unsigned)time(NULL)); 

for (int i = 0; i < 50; ++i) 
{ 
    int b = rand() % 100 + 1; 
    list.insertSorted(b); 
}  
displayListForward(&list); 

} 


void displayListForward(SortedListInterface<int>* listPtr) 
{ 
cout << "The sorted list contains " << endl; 
for (int pos = 1; pos <= listPtr->getLength(); pos++) 
{ 
    cout << listPtr->getEntry(pos) << " "; 
} 
cout << endl << endl; 
} 

回答

0

一個很好的想法是擺脫非標準通用容器,轉而使用std::list(或者真的只是std::vector如果你不需要特定列表的語義如能刪除一個元素而不會將迭代器賦予其他元素)。

sort成員函數可以在添加所有項目後應用。最後,您可以使用rbeginrend進行反向迭代。

下面是一個簡單的例子:

#include <iostream> 
#include <list> 
#include <cstdlib> 
#include <ctime> 

void DisplayListForward(std::list<int>& list) 
{ 
    std::cout << "The sorted list contains\n"; 

    for (auto iter = list.rbegin(); iter != list.rend(); ++iter) 
    { 
     std::cout << *iter << " "; 
    } 
    std::cout << '\n'; 
} 

void InsertRandomInts() 
{ 
    std::list<int> list; 
    std::srand(static_cast<unsigned>(std::time(nullptr))); 

    for (int i = 0; i < 50; ++i) 
    { 
     auto const b = std::rand() % 100 + 1; 
     list.push_back(b); 
    } 

    list.sort(); 

    DisplayListForward(list); 
} 

int main() 
{ 
    InsertRandomInts(); 
} 

但是這可能是矯枉過正;對於快速解決方案,只需將您的當前循環顛倒過來:

for (int pos = listPtr->getLength(); pos >= 1; pos--) 
+0

爲了我需要做的事情,我將採取快速解決方案。謝謝。 –

2

將列表從rbegin()複製到rend()並打印出來。您將反向打印它。

要麼1)停止重新發明輪子,只使用具有這些功能的標準容器。或2)爲您的自定義容器實現rbegin()& rend()。

for (auto it = list.rbegin(); it != it.rend(); ++it) 
    // Print *it 
+0

在代碼中看起來如何?這聽起來像我正在用印刷前進。 –

+0

OP不使用標準容器。沒有'rbegin'和'rend' ... –

+0

@Christian Hackl然後OP可以1)停止重新發明輪子,只是使用標準容器。或者2)爲他的自定義容器實現'rbegin()'&'rend()'。 –