struct ListNode* ReverseList(struct ListNode* pHead ) {
    // write code here
    //算法的核心是 遍历每一个节点,保存好节点的next 并把next指向上一个node
    //注意防止传个空指针进来,或者链表只有一个节点
    struct ListNode *nextNode = NULL;
    struct ListNode *currectNode = NULL;
    struct ListNode *lastNode = NULL;
    if (pHead == NULL || pHead->next == NULL) {
        return pHead;
    }

    currectNode = pHead;

    while (currectNode != NULL) {
        nextNode = currectNode->next; //保存当前节点的下一个节点
        currectNode->next = lastNode; //当前节点的next指向上个节点
        lastNode = currectNode; //更新lastNode 为下次循环准备
        if (nextNode != NULL) {
            currectNode = nextNode; //非空 走向下个节点
        } else {
            return currectNode;
        }     
    }
    return currectNode;
}