您的位置:首页 > 其它

剑指22:链表中倒数第k个节点——两个指针,健壮性

2018-04-02 20:40 323 查看
输入一个链表,输出该链表中倒数第k个结点。

最好能够一次遍历完成
Tips:
        k是无符号数类型的 考虑k=0 时 以及 k=0时 k-1为 0xFFFFFFFF
        两个指针
        健壮性:不清楚长度的情况下,要记得隐藏条件 长度应该比k大class Solution {
public:
ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
if(pListHead == nullptr || k == 0) //k是无符号数 k-1是0xFFFFFFFF mark
return nullptr;
ListNode* result = pListHead;
ListNode* gotoend = pListHead;
//int countlen = 0;
for(int i=1;i<k;i++){
if(gotoend->next)
gotoend = gotoend->next; //前进k-1步 到达从前向后第k个结点
else
return nullptr;
}
while(gotoend->next){ //两个指针保持的间隔足够达到倒数k和尾部
result=result->next;
gotoend = gotoend->next;
}
return result;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: