本题思路:可以先创建三个指针n1为空 n2为head n3为n2的下一个节点 ,然后令n2指向n1,再让n2 = n1,再让n3往后走最后返回n1即可

开始创建

第一次修改,往后依次类推

最后

/**
 * struct ListNode {
 *	int val;
 *	struct ListNode *next;
 * };
 */
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 pre:用来指向反转后的节点,初始化为null;
//cur:当前节点指针(cur=head);
//迭代:在遍历链表时,将当前节点的next指针指向前一个节点(head->next=pre),由于节点没有引用其前一个节点,必须事先存储前一个节点(pre=head);在更改引用之前,还有存储后一个节点(cur=head->next),最后返回新的头引用(head=cur)。
 * 
 * @param head ListNode类 
 * @return ListNode类
 */
 typedef struct ListNode ListNode;
struct ListNode* ReverseList(struct ListNode* head ) {
    //处理空链表
    if(head ==NULL){
        return head;
    }
    //先创建三个指针
    ListNode* n1, *n2, *n3;
    n1 = NULL, n2 = head, n3 = head->next;
     
    //遍历链表,修改节点指针
    ListNode* pcur = head;  //这里是创建一个临时的指针来遍历链表
    while(n2){
        //修改n2的指向
        n2->next = n1;
        //修改三个指针的位置
        n1 = n2;
        n2 = n3;
        if(n3)
        n3 = n3->next;
    }
    return n1;
}