题解 | #反转链表#

反转链表

https://www.nowcoder.com/practice/75e878df47f24fdc9dc3e400ec6058ca

/**
 * 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为空,才代表着没有元素

全部评论

相关推荐

07-02 13:52
门头沟学院 Java
点赞 评论 收藏
分享
评论
2
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务