/*
struct ListNode {
    int val;
    struct ListNode *next;
    ListNode(int x) :
            val(x), next(NULL) {
    }
};*/
class Solution {
public:
    ListNode* ReverseList(ListNode* pHead) {
    if(pHead==NULL||pHead->next==NULL)//首先判断链表节点情况,空表或者只有一个节点时直接return pHead即可
        return pHead;
        else if(pHead->next->next==NULL)//两个节点的话也很简单,不解释了
        {
            ListNode *q=pHead;
            pHead=pHead->next;
            pHead->next=q;
            q->next=NULL;
            return pHead;
        }
        else//重点在于大于等于三个节点,此时定义两个前驱和后继指针q,p循环赋值即可改变原有链表指向
        {
            ListNode *q=pHead;
            pHead=pHead->next;
            ListNode *p=pHead->next;
            q->next=NULL;
            while(p!=NULL)
            {
                pHead->next=q;
                q=pHead;
                pHead=p;
                p=p->next;
            }
              pHead->next=q;
            return pHead;
        }
    }
};