目录
题目描述
思路
此题可以利用快慢指针,设置一个快指针和一个慢指针,让快指针先走k次,与满指针拉开k-1节点的距离,再让快指针和慢指针同时走,当快指针为空时,慢指针也会同时到达倒数第k个节点
解题方法
创造两个指针,把头节点赋值给两个指针。设置两个循环,第一个循环里是快指针先走(注意k可能会大于链表节点个数,因此需要写当快指针为空的情况),第二个循环是两个指针同时走,当快指针为空时循环结束
代码实现
/**
* 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* slow=pHead;
struct ListNode* fast=pHead;
while(k--)//快指针先走,到第k-1的节点
{
if(fast)//当k大于链表节点个数时
{
fast=fast->next;
}
else
{
return NULL;
}
}
while(fast)
{
slow=slow->next;
fast=fast->next;
}
return slow;
}