您的位置:首页 > 职场人生

面试题15:链表中倒数第k个节点

2016-06-04 17:09 351 查看
    题目:输入一个链表,输出该链表中倒数第k个节点。从1开始计数,如链表有1,2,3,4,5,6.倒数第三个节点是值为4的节点。

    可以采用两个指针,思路比较清晰,但是就是一些边界条件很难考虑全,比如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==NULL)
return NULL;
ListNode* fast=pListHead;
ListNode* slow=pListHead;
int num=1;
while(fast!=NULL&&num<=k)
{
fast=fast->next;
num++;
}
if(fast==NULL&&num<=k)
return NULL;
while(fast!=NULL)
{
fast=fast->next;
slow=slow->next;
}
return slow;
}
};    看了下书上的解答,代码思路清晰,如下:
    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||k==0)
return NULL;
ListNode* fast=pListHead;
ListNode* slow=pListHead;
for(unsigned int i=0;i<k-1;i++)
{
if(fast->next!=NULL)
fast=fast->next;
else
return NULL;
}

while(fast->next!=NULL)
{
fast=fast->next;
slow=slow->next;
}
return slow;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: