描述
输入一个链表,输出该链表中倒数第k个结点。
示例
示例1
输入:
1,{1,2,3,4,5}
返回值:
{5}
解题思路以及代码
解法1
计算结点个数,算要走的步数。注意链表为空和k等于0的情况
struct ListNode* FindKthToTail(struct ListNode* pListHead, int k ) {
// write code here
//法1
int count=0;
struct ListNode* countnode=pListHead,*cur=pListHead;
while(countnode)
{
++count;
countnode=countnode->next;
}
int foot=count-k;
if(foot < 0 || k == 0)
{
return NULL;
}
while(foot--)
{
cur=cur->next;
}
return cur;
}
解法2
快慢指针,快指针先走k步,然后快慢指针在一起走
struct ListNode* FindKthToTail(struct ListNode* pListHead, int k ) {
// write code here
//法2
struct ListNode* fast,*slow;
fast=slow=pListHead;
//快指针先走k步
while(k--)
{
//k > 链表长度
if(fast == NULL)
return NULL;
fast=fast->next;
}
//在一起走
while(fast)
{
slow=slow->next;
fast=fast->next;
}
return slow;
}