CPP : How to Reverse a List or Sub-List in Place?

In the previous article, we have discussed about How to Erase Elements from a List in CPP using Iterators. Let us learn How to Reverse a List or Sub-List in Place? in C++ Program.

Lists are sequence containers that allow for the allocation of non-contiguous memory. List traversal is slower than vector traversal, but once a position is found, insertion and deletion are fast. Normally, when we talk about a List, we mean a doubly linked list. We use a forward list to implement a singly linked list.

Given a list, the task is to reverse a list  or sub-list in place

Example:

Input:

stringlist ={ "hello" , "this" , "is" , "BTech" , "Geeks" }

Output:

Before reversing the list : hello this is BTech Geeks 
After reversing the list : Geeks BTech is this hello

Reverse a List or sub-list in place

The member function reverse() is available in std::list() to reverse the list in place

1)Reverse whole list

We can reverse the whole list using reverse() function

Below is the implementation:

#include <bits/stdc++.h>
using namespace std;
int main()
{
    // Make a list and initialize it with some elements.
    list<string> stringlist(
        { "hello", "this", "is", "BTech", "Geeks" });
    cout << "Before reversing the list : ";
    for (auto itr = stringlist.begin();
         itr != stringlist.end(); ++itr)
        cout << *itr << " ";
    cout << endl;
    // reversing the whole list using reverse() function
    stringlist.reverse();
    // printing the list
    cout << "After reversing the list : ";
    for (auto itr = stringlist.begin();
         itr != stringlist.end(); ++itr)
        cout << *itr << " ";
}

Output:

Before reversing the list : hello this is BTech Geeks 
After reversing the list : Geeks BTech is this hello

2)Reverse the sub-list

Let us reverse the first 3 elements of the list .

We can implement it using std::reverse() and std::next() functions.

Below is the implementation:

#include <bits/stdc++.h>
using namespace std;
int main()
{
    // Make a list and initialize it with some elements.
    list<string> stringlist(
        { "hello", "this", "is", "BTech", "Geeks" });
    cout << "Before reversing the list : ";
    for (auto itr = stringlist.begin();
         itr != stringlist.end(); ++itr)
        cout << *itr << " ";
    cout << endl;
    // reversing the first 3 items of the list
    reverse(stringlist.begin(),
            next(stringlist.begin(), 3));
    // printing the list
    cout << "After reversing the first 3 items of the list "
            ": ";
    for (auto itr = stringlist.begin();
         itr != stringlist.end(); ++itr)
        cout << *itr << " ";
}

Output:

Before reversing the list : hello this is BTech Geeks 
After reversing the first 3 items of the list : is this hello BTech Geeks

Related Programs: