在牛客网的第一篇双百题解
链表中倒数第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;
}
深信服公司福利 751人发布