/*
struct ListNode {
	int val;
	struct ListNode *next;
	ListNode(int x) :
			val(x), next(NULL) {
	}
};*/
class Solution {
public:
    ListNode* ReverseList(ListNode* pHead) {
		ListNode*j=pHead;
		int size=0;
		while(j!=nullptr)
		{
			size++;
			j=j->next;
		}
		if(size<=1)
		{
			return pHead;
		}
		if(size==2)
		{
			ListNode*p=pHead->next;
			pHead->next=nullptr;
			p->next=pHead;
			return p;
		}
		ListNode*p=pHead;
		ListNode*q=p->next;
		ListNode*s=q->next;
		if(p==pHead)
		{
			// p->next=NULL;
			p->next=nullptr;
		}
		q->next=p;
		p=q;
		while(s)
		{
			q=s;
			s=q->next;
			q->next=p;
			p=q;
		}
	return p;
    }
};