元のリストの各要素に対して 1 つのエントリを持つ配列などの補助データ構造を構築できるように、再帰が機能します。O(n) の余分なストレージを必要としないシングルスレッド リストのソリューションが必要な場合は、Michael が提案するようにリストを元に戻すことをお勧めします。この例を書きましたが、[宿題の心配があるので省略します]。リストを反転する際の注意点: 元のリストへのポインターを保持する他のデータ構造があり、トラバーサル中にそれらにアクセスする可能性がある場合、リストが反転している間にリストにアクセスする必要がある場合、それらは機能しません。リストを変更しようとすると、データが破損する可能性があります。
更新: わかりました。リストを元に戻す (C++) ルーチンを次に示します。ただし、テストされていません。これが宿題である場合、投稿者は完全な答えを得るためにこのルーチンを正しく使用する方法を理解する必要があることに注意してください。
Node *ReverseList(Node *head) {
// Reverse a single-threaded list in place, return new head
Node *prev=NULL;
Node *cur=head;
while (Node *next=cur->next_) {
cur->next_ = prev;
prev = cur;
cur = next;
}
cur->next_ = prev;
return cur;
}