描述
输入一个长度为 n 的链表,设链表中的元素的值为 ai ,返回该链表中倒数第k个节点。
如果该链表长度小于k,请返回一个长度为 0 的链表。
直接返回NULL。结束。不用判断语句输出。
struct ListNode* FindKthToTail(struct ListNode* pHead, int k ) {
// write code here
struct ListNode* fast = pHead;
struct ListNode* slow = pHead;
while(k--)
{//fast先走k步
if(fast == NULL) //fast还没走出k步,链表没有k步长。
return NULL;
fast = fast->next;
}
while(fast)
{
fast = fast->next;
slow = slow->next;
}
return slow;
}
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param pHead ListNode类
* @param k int整型
* @return ListNode类
*/
struct ListNode* FindKthToTail(struct ListNode* pHead, int k ) {
// write code here
struct ListNode* fast = pHead;
struct ListNode* slow = pHead;
while(fast)
{
for(;k>0;k--)
{
if(fast == NULL) //如果到尾部要停止。
{
break;
}
fast = fast->next;
}
if(k>0) //如果k没有减到零说明不够长。
{
return NULL;
}
if(fast == NULL) //如果刚好指导尾部,说明k长.
{
break;
}
fast = fast->next;
slow = slow->next;
}
return slow;
}
struct ListNode* FindKthToTail(struct ListNode* pHead, int k ) {
// write code here
struct ListNode* fast = pHead;
struct ListNode* slow = pHead;
while(k>0)
{//fast先走k步
if(fast == NULL)
{
break;
}
fast = fast->next;
k--;
}
if(k>0)
{
return NULL;
}
while(fast)
{
fast = fast->next;
slow = slow->next;
}
return slow;
}