题目描述:
输入一个链表,输出该链表中倒数第k个结点。

按部就班的解法,这就双百了?

不过就事论事,题目中需要考虑边界值的地方还是比较多的。
话不多说,直接上代码:
ListNode* FindKthToTail(ListNode* pHead, int k) {
    if (!pHead || k < 0) {
        return nullptr;
    }
    int length = 1;
    ListNode* len = pHead;
    // 计算链表长度
    while (len != nullptr && len->next != nullptr) {
        len = len->next;
        length ++;
    }
    // 判断k值的合理性
    if (k > length) {
        return nullptr;
    }
    ListNode* first = pHead;
    // 首次遍历链表
    for (int i = 0; i < k; i++) {
        first = first->next;
        if (first->next == nullptr) {
            return pHead;
        }
    }
    ListNode* second = pHead;
    // 二次遍历链表
    while (first != nullptr &&
           first->next != nullptr) {
        first = first->next;
        second = second->next;
    }
    return second->next;
}