/**
 * struct ListNode {
 *	int val;
 *	struct ListNode *next;
 * };
 */
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param head ListNode类 
 * @return ListNode类
 */
struct ListNode* ReverseList(struct ListNode* head )
{
  //第一步:定义出三个指针变量,指向对应的节点
   struct ListNode* n1 = NULL;
   struct ListNode* n2 = head;
   struct ListNode* n3 = n2->next;

   if(head == NULL)
   {
        return NULL;
   }
  
   while(n2)  //只有n2为空,才结束
   {
        n2->next = n1; //n2->next原本是指向n3,现在让他们转过来指向n1,null;
        //让所有指针,往后走一步
        n1 = n2;
        n2 = n3;
         //n3会提前为空,所有在空的位置就不能再移动了,会造成越界
        if(n3){
            n3 = n3->next;
        }
   }
    return n1;
   
}

解题思路:把指节点指向的方向换一下就可以了

第一步:定义出三个指针变量,n1, n2, n3, 不管他有几个节点,三个指针够用了

一直重复: n2 ->next = n1; 移动元素:n1 = n2 , n2 = n3 n3 = n3->next;

所有我们知道只有n2为空,才代表着没有元素