/**
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param head ListNode类
* @return ListNode类
*/
struct ListNode* ReverseList(struct ListNode* head ) {
// write code here
struct ListNode *pre=NULL;
struct ListNode *cur=head;
struct LisrNode *after=NULL;
while(cur!=NULL)
{
after=cur->next;
cur->next=pre;
pre=cur;
cur=after;
}
return pre;//当cur是空结点时,pre就是最后一个有效结点
}
//解题思路:定义三个指针完成这道题目,*pre,*cur,*after;分别表示前一个,当前,后一个判断的结点指针
//先赋初值,当前赋初值头指针,其他为NULL,
//判断当前是否为有效结点 while(cur)也行,如果是,执行以下操作
//先将*after指向cur的后一个结点;定义一下刚才没定义的after指针,因为当cur不为空时after的定义才有意义。
//逆转指向:将cur当前所指重新定义指向前一个结点,即cur=pre;
//一开始pre为空,所以cur重新指向的也是空
//此时完成逆转指向,然后准备下一次的判断,要先将pre跟上cur,cur再向后走到after;
//即pre=cur;cur=after;