/**
 * struct ListNode {
 *	int val;
 *	struct ListNode *next;
 * };
 */
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param head ListNode类 
 * @return ListNode类
 */
struct ListNode* ReverseList(struct ListNode* head ) {
    //思路
    //创建一个头结点,指向第一个结点,将该结点后面的所有结点,依次前移为头结点指向的第一结点;
    struct ListNode pHead = { .next = head };
    struct ListNode *pMove = head->next;
    struct ListNode *pTemp = NULL;
    if(head == NULL) {
        return NULL;
    }
    while (pMove != NULL) {
        pTemp = pMove; // 记录要被移动的成员
        head->next = pTemp->next; //断链
        // 插入到头结点的后面,成为新的第一结点
        pTemp->next = pHead.next; 
        pHead.next = pTemp;

        pMove = head->next; // 继续处理下一个结点
    }

    return pHead.next;
}