【剑指offer】22、链表中倒数第k个节点

题目

输入一个链表,输出该链表中倒数第k个结点。

思路

不难,只需用快慢指针,快指针先走k-1,然后一起走,慢指针指向节点就是答案。

但是需要考虑程序鲁棒性

1、输入空指针

2、链表节点数少于k

3、k=0时,在循环中k-1转换成无符号数后变为232-1,会陷入死循环

class Solution {
public:
    ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
        if (pListHead == nullptr || k == 0) 
            return nullptr;
        ListNode* fast = pListHead, *slow = pListHead;
        for (unsigned int i = 1; i <= k-1; i++){
            if (fast->next)
                fast = fast->next;
            else return nullptr;
        }
        while (fast->next){
            fast = fast->next;
            slow = slow->next;
        }
        return slow;
    }
};

 拓展

若需要返回链表中间节点,可以用快慢指针,一个走一步,一个走两步,最后慢指针得到的就是中间节点。

猜你喜欢

转载自www.cnblogs.com/shiganquan/p/9340940.html