分析:使用两个指针,后一个指针先走k步,然后两个指针一起走,直到后一个指针走到最后一个元素。
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
if (!pListHead || k == 0) {
return NULL;
}
ListNode* p_head = pListHead;
ListNode* p_tail = pListHead;
while(--k != 0) {
if (p_tail->next) // 特别注意这个条件// (1)
p_tail = p_tail->next;
else
return NULL;
}
while(p_tail->next != NULL) {
p_head = p_head->next;
p_tail = p_tail->next;
}
return p_head;
}
};
这里需要注意一点,上述代码加注释的地方,这里是为了防止一个越界的情况发生,即当链表的长度 < k时的情况。本人在刷这道题时反复通不过,就是一开始忽略了这个地方。
博客介绍了链表分析方法,使用两个指针,后一个指针先走k步,然后两指针一起走直至后指针到最后元素。同时强调要注意防止越界,当链表长度小于k时会出现越界情况,作者刷题时曾因忽略此点反复不通过。
372

被折叠的 条评论
为什么被折叠?



