/*
struct ListNode {
    int val;
    struct ListNode *next;
    ListNode(int x) :
            val(x), next(NULL) {
    }
};*/
class Solution {
  public:
    ListNode* ReverseList(ListNode* pHead) {
        if (pHead==nullptr) return nullptr;
        ListNode* pre = nullptr;
        ListNode* nxt = nullptr;
        ListNode* cur = pHead;
        while (cur){
			// pre cur => pre <- cur(pre')  nxt(cur')
			nxt = cur->next;
			cur->next = pre;
			pre = cur;
			cur = nxt;
        }
        return pre;
    }
};