剑指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;
}
};
最好能够一次遍历完成
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;
}
};
相关文章推荐
- 剑指offer面试题22:链表的倒数第k个节点 java
- 剑指Offer-22:链表中倒数第k个节点
- 【剑指offer】面试题22:链表中的倒数第k个节点
- 剑指offer--面试题22:链表中倒数第k个节点
- 剑指offer面试题22:链表中倒数第K个节点
- 【链表】C++快慢两个指针解决问题(分别求倒数第k个、中间以及环的入口结点)
- 剑指Offer----链表中倒数第k个节点
- 剑指Offer之链表中倒数第k个节点(题15)
- 剑指offer——链表中倒数第k个节点
- 【剑指offer】题15:链表倒数第k个节点
- 剑指offer---链表中倒数第k个节点
- [剑指offer]面试题15.链表中倒数第K个节点
- 剑指Offer面试题:14.链表的倒数第k个节点
- 剑指Offer---面试题15:链表中的倒数第k个节点
- 【剑指offer】链表倒数第k个节点
- 巧妙利用两个指针遍历链表——链表中倒数第k个结点
- 链表中倒数第k个节点(剑指Offer 第14 题)
- 剑指offer--15.链表中倒数第k个节点
- [剑指Offer]链表中的倒数第k个节点
- 剑指Offer :寻找链表中倒数第K个节点