I usually like to do things a bit more manually, so there is my solution:
List<int> randomItems = new List<int>(){1,2,3,4,5,6,7};
List<int> outputOrder = new List<int>(){0,6,3,1,2,4,5};
List<int> resultList = new List<int>();
foreach(int order in outputOrder)
{
resultList.Add(randomItems[order]);
}
Edited in order to replicate the OP values
The resultList will contain: 1,7,4,2,3,5,6
Alternatively you can have the outputOrder like this:
List<int> outputOrder = new List<int>(){1,7,4,2,3,5,6};
and simply change the loop instruction to:
resultList.Add(randomItems[order--]);
And the result will be the same.