定义指针变量p,q,r,初始化p=pHead指向函数参数指针头部,q=p->next指向p的下一个结点,r=q->next指向q的下一个结点,因为反转后头变成尾,所以指向头部的指针p的next赋值为空,之后执行循环,每次将中间结点q的next指向p,然后p,q,r向后挪一个位置,重复这个步骤直到r指针为空时跳出循环,此时得到的q指针即为反转后的链表头部

class Solution {
public:
    ListNode* ReverseList(ListNode* pHead) {
       ListNode* p=(ListNode*)malloc(sizeof(ListNode));
       ListNode* q=(ListNode*)malloc(sizeof(ListNode));
        ListNode* r=(ListNode*)malloc(sizeof(ListNode));
       if(pHead==NULL)
           return NULL;
        if(pHead->next == NULL)
            return pHead;
        p=pHead;
        q=p->next;
        p->next=NULL;
        r=q->next;
        while(true){
            q->next=p;
            if(r==NULL)
                break;
            p=q;
            q=r;
            r=r->next;
        }
        return q;
    }

};