/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
#include "stdio.h"
struct ListNode *getKthFromEnd(struct ListNode *head, int k) {
if (k < 0) {
return NULL;
}
struct ListNode *fastNode = head;
for (int i = 0; i < k; i++) {
if (fastNode == NULL) {
return NULL;
}
fastNode = fastNode->next;
}
struct ListNode *slowNode = head;
while (fastNode != NULL) {
fastNode = fastNode->next;
slowNode = slowNode->next;
}
return slowNode;
}
- 遍历一次是最快的方法,时间复杂度为O(n).
- 一定要有异常处理,即不core掉的异常处理.
- 即便返回NULL值也是可以接受的.