/**
 * struct ListNode {
 *	int val;
 *	struct ListNode *next;
 * };
 */

/**
 * 
 * @param pHead ListNode类 
 * @return ListNode类
 */
struct ListNode* ReverseList(struct ListNode* pHead ) {
    // write code here
    struct ListNode* pre=NULL;  //pre指针指向已经反转好的链表的最后一个节点,最开始没有反转,所以指向NULL
    struct ListNode* cur=pHead;  //cur指针指向待反转链表的第一个节点,最开始第一个节点待反转,所以指向head
    struct ListNode* nex=NULL;   //nex指针指向待反转链表的第二个节点,目的是保存链表,因为cur改变指向后,后面的链表则失效了,所以需要保存

    while(cur!=NULL)
    {
        nex=cur->next;  //nex = cur->next, 保存作用
        cur->next=pre;  //cur->next = pre 未反转链表的第一个节点的下个指针指向已反转链表的最后一个节点
        pre=cur;        //指针后移,操作下一个未反转链表的第一个节点
        cur=nex;
    }
    return pre;
}