在牛客网的第一篇双百题解
链表中倒数第k个结点
http://www.nowcoder.com/questionTerminal/886370fe658f41b498d40fb34ae76ff9
题目描述:
输入一个链表,输出该链表中倒数第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; }