前言
本系列主要讲解链表的经典题
注:划重点!!必考~
找到链表的中间结点
输入一个链表,输出该链表中倒数第k个结点
遍历链表两次
注意:k的大小可能超过链表长度这一特殊情况 注:这里我们来实现高效思路
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
/**
*
* @param pListHead ListNode类
* @param k int整型
* @return ListNode类
*/
struct ListNode* FindKthToTail(struct ListNode* pListHead, int k ) {
//链表不为NULL
if(pListHead==NULL)
return NULL;
struct ListNode* slow=pListHead,*fast=pListHead;
while(k--)
{
//节点数量比k小
if(fast==NULL)
return NULL;
fast=fast->next;
}
//fast为NULL则停止
while(fast)
{
fast=fast->next;
slow=slow->next;
}
return slow;
}
每日k题无烦恼,点赞学习不得了~