/*
struct ListNode {
    int val;
    struct ListNode *next;
    ListNode(int x) :
            val(x), next(NULL) {
    }
};*/
class Solution {
  public:
 		ListNode *resolve(ListNode *pHead)
	{
		if (!pHead)
			return NULL;
		ListNode *pNextNode = resolve(pHead->next);
		if (!pNextNode)
		{
			return pHead;
		}
		else
		{
			pNextNode->next = pHead;
			pHead->next = NULL;
			return pHead;
		}
	}

	ListNode* ReverseList(ListNode* pHead) {

		ListNode *ret = pHead;
		while (ret && ret->next)
		{
			ret = ret->next;
		}

		resolve(pHead);

		return ret;
	}
};

思路:
	首先定位最后一个子节点: 自然是while和递归中的递;