template <class T>
struct ListNode
{
T value;
ListNode* next;
};
ListNode* ReverseList(ListNode* const head)
{
if (head == null)
return null;
ListNode *c = head, *p = null, *n = null;
while (c->next != null)
{
n = c->next;
c->next = p;
p = c;
c = n;
}
c->next = p;
return c;
}