题目来源:
链表中倒数第k个结点_牛客题霸_牛客网 (nowcoder.com)
题目描述:
代码实现:
struct ListNode* FindKthToTail(struct ListNode* pListHead, int k ) { // write code here struct ListNode* slow = pListHead, *fast = pListHead; while(k--) { //k大于链表的长度 if(fast == NULL) return NULL; fast = fast->next; } while(fast) { fast = fast->next; slow = slow->next; } return slow; }
思路分析:
我们让 fast 先走 k 步,然后 slow 与 fast 再一起走,每次分别走一步,当fast 为 NULL 的时候,slow就指向倒数第 k 个结点。
错误分析:
我们将用例都测试一下:
第一组成功,我们继续测第二组
这个看这个用例,链表为空的时候,我们要找倒数第100个结点,这个结点是不存在的,应该返回NULL,但是我们却让 fast 先走100步,链表本就是空,fast只要走就会导致空指针异常,所以我们写的代码就会漏洞。我们应该在 fast = fast->next 前就先判断 fast 是否为空,这样也就判断了链表不为空,但是链表的长度小于 k 这样的情况。
*** 本篇结束 ***