14、 链表中倒数第k个结点 过,可以不再刷了
输入一个链表,输出该链表中倒数第k个结点。
示例1
输入
1,{1,2,3,4,5}
返回值
{5}
1、比较简单的一种方法
时间复杂度较高,没有二刷的那种方法好
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;
}
二刷:
1、快慢指针,不应该说是先后指针
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;
}
美女帅哥们如果觉得写的还行,有点用的话麻烦点个赞或者留个言支持一下阿秀~
如果觉得狗屁不通,直接留言开喷就完事了。