#include <iostream>

/*
or use a stack
*/

using namespace std;

struct ListNode {
  int m_nVal;
  ListNode *m_pNext;
};

ListNode* reverse_linked_list(ListNode *pHead) {
  ListNode *pReversedHead = NULL;

  ListNode *pPrev = NULL;
  ListNode *pNode = pHead;
  while(pNode!=NULL) {
    ListNode *pNext = pNode->m_pNext;

    if(pNext==NULL)
      pReversedHead = pNode;

    pNode->m_pNext = pPrev;
    pPrev = pNode;

    pNode = pNext;
  }

  return pReversedHead;
}


int main(int argc, char **argv) {

  return 0;
}
