输入一个链表,输出该链表中倒数第k个结点。
输入
1,{1,2,3,4,5}
返回值
{5}
时间复杂度较高,没有二刷的那种方法好
ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
int count=0;
ListNode * node=pListHead;
while(pListHead!=nullptr){
count++;
pListHead=pListHead->next;
}
count = count-k;
if(count<0) return nullptr;
while(count--)
node=node->next;
return node;
}3 ms 376K
ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
ListNode * slowNode = pListHead;
while(k != 0){//这里判断 k 一直走到 0 即可
k--;
if(pListHead != nullptr) pListHead = pListHead->next;//在其中判断是否出现k 大于链表总长度的情况,
//比如 【1,2,3,4,5】 6这样的情况,如果出现这样的情况,返回即可
else
return nullptr;
}
while(pListHead != nullptr){//先走的不能为空
slowNode = slowNode->next;
pListHead = pListHead->next;
}
return slowNode;
}