错误题目:876. 链表的中间结点
错误原因:试图使用空指针
解决方法:找出等价判断条件进行替换,排除对空指针的引用。
/*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/struct ListNode* middleNode(struct ListNode* head){struct ListNode* fast=head;struct ListNode* slow=head;while(fast->next!=NULL &&fast->next->next!=NULL ){fast=fast->next->next;slow=slow->next;}if(fast->next->next==NULL){slow=slow->next;}return slow;
}
第一眼看上去好像没毛病,注意空指针的坑,下面看错误提示:
说试图会使用空指?
if里面的判断,fast->next可能就是空指针,当fast->next为空时,fast->next->next即空指针的next,是错误的,由while循环条件可知,到if判断时,要么, fast->next为空,要么fast->next->next为空,因此我们把判断条件改为 if(fast->next!=NULL)即 等价于原报错判断。
这样就成功啦,第一次写博客,有许多细节没注意到,勿怪。