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