题目
输入一个链表,输出该链表中倒数第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; } };
拓展
若需要返回链表中间节点,可以用快慢指针,一个走一步,一个走两步,最后慢指针得到的就是中间节点。