CodingInterview-链表中倒数第K个结点

这道题十分简单,用两个指针分别指向链表头部,fast 指针先走 k 步,然后 fast 和 slow 指针一起向前走,直到 fast 指针指向 NULL,slow 指针指向的元素就是倒数第 k 个节点。

不过需要注意的是可能 k 给的会有问题(比如大于链表的长度),所以要在 fast 指针先走 k 步的时候判断是否存在异常的情况。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/*
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==NULL) return NULL;
ListNode* pSlow=pListHead;
ListNode* pFast=pListHead;
for(int i=0;i<k;i++){
if(pFast==NULL) return NULL;
pFast=pFast->next;
}
while(pFast!=NULL){
pSlow=pSlow->next;
pFast=pFast->next;
}
return pSlow;
}
};