递归解法,利用递归找到最后的结点,并且用ret记录,最后返回它。
当递归执行到返回最后一个结点后,此时pHead结点是倒数第二个结点,由于在递归前并没有改变此链表的结构,此时倒数第二个结点依旧指向最后一个结点,改变它的指向,让最后一个结点指向它。
翻转后两个结点结束后,倒数第三个结点依旧保留着和倒数第二个结点的指向关系,还是之前的步骤。

class Solution {
public:
    ListNode* ReverseList(ListNode* pHead) {
        if (pHead == NULL || pHead->next == NULL) {
            return pHead;
        } 
        ListNode *ret = ReverseList(pHead->next);
        pHead->next->next = pHead;
        pHead->next = NULL;
        return ret;
    }
};