//快指针找到中间节点
//能正常运行的写法
ListNode*slow=head;
ListNode*fast=head;
while(fast!=nullptr&&fast->next!=nullptr)
{
slow=slow->next;
fast=fast->next->next;
}
在调试的过程中发现,快慢指针寻找中间节点过程中,如果条件变成
//不能正常运行的写法
ListNode*slow=head;
ListNode*fast=head;
while(low->next!=nullptr&&fast->next->next!=nullptr)
{
slow=slow->next;
fast=fast->next->next;
}
就会出现段错误的问题
分析:
第二种写法中,low->next这一条件判断实属多余,因为low走的慢,出现空指针肯定是在快指针上面;
所以第二种方法的判断等价于while(fast->next->next!=nullptr),那么当fast==nullptr时,再去判断fast->next->next是在是没有任何意义。
而第一种写法时,不仅判断了fast指针而且判断了fast->next指针,当fast指针或者fast->next指针任何一个为空时说明到达了链表的尾节点。