using System.Collections.Generic;
public static void Main()
var item1 = new ListItem {Name = "Item 1"};
var item2 = new ListItem {Name = "Item 2", Next = item1};
var item3 = new ListItem {Name = "Item 3", Next = item2};
var item4 = new ListItem {Name = "Item 4", Next = item3};
var item5 = new ListItem {Name = "Item 5", Next = item4};
var newStart = RevertList2(item5);
private static void PrintList(ListItem item)
Console.WriteLine(item.Name);
private static ListItem RevertList(ListItem item, ListItem previous = null) {
var nextItem = item.Next;
var nextItemsNext = nextItem.Next;
if (nextItemsNext != null)
return RevertList(nextItemsNext, nextItem);
private static ListItem RevertList2(ListItem item)
var stack = new Stack<ListItem>();
while (currentItem.Next != null)
stack.Push(currentItem.Next);
currentItem = currentItem.Next;
var firstItem = stack.Peek();
while (stack.Count > 1) {
currentItem = stack.Pop();
currentItem.Next = stack.Peek();
public string Name {get;set;}
public ListItem Next {get;set;}