/*
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;
        }
        if (pHead->next == nullptr) {
            return pHead;
        }
        ListNode* newHead = pHead; // 节点头
        ListNode* oldNext = nullptr; //存放下一个节点
        ListNode* newNext = nullptr; //存放上一个节点
        ListNode* loopNode = pHead; //遍历节点
        while (loopNode != nullptr) {
            oldNext = loopNode->next;
            loopNode->next = newNext;
            if (oldNext == nullptr) {
                newHead = loopNode;
            }
            newNext = loopNode; // loopNode = loopNode->next->pre
            loopNode = oldNext; // loopNode = loopNode->next;
        }
        return newHead;
    }
};