2017-10-28 16 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()'を実装します。 –

関連する問題