1.思路:
定义一个start和end指针,使其之间相差k个结点,令它们同时往后移动,当end到达链表末尾时,start所指即为链表中倒数第k个结点。需要注意的是要讨论链表是否存在倒数第k个结点,即链表长度是否大于k,若不存在,应及时停止并返回NULL。
2.代码:
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
ListNode* start = pListHead;
ListNode* end = pListHead;
if(k == 0) return NULL;
while((k != 0) && (end != NULL)) {
end = end->next;
--k;
}
if(k > 0) return NULL;
while(end != NULL) {
start = start->next;
end = end->next;
}
return start;
}
};
本文介绍了一种高效查找链表中倒数第K个节点的方法。通过设置两个指针,先让其中一个指针向前移动K个位置,然后两个指针同步移动直至前指针到达链表尾部,此时另一个指针指向的就是链表的倒数第K个节点。

128

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



