/*
struct ListNode {
	int val;
	struct ListNode *next;
	ListNode(int x) :
			val(x), next(NULL) {
	}
};*/
class Solution {
public:
    ListNode* ReverseList(ListNode* pHead) {
		if(pHead==nullptr||pHead->next==nullptr){
			return pHead;
		}
		ListNode *r=pHead->next->next,*p=pHead->next,*h=pHead;
		pHead->next=nullptr;
		do{
			p->next=h;
			h=p;
			p=r;
			if(p==nullptr){
				break;
			}
			r=p->next;
		}while(p!=nullptr);
		return h;
    }
};