题目链接:链表中倒数第K个数
我的思路
- 题目是单向链表,而且要遍历一次链表就搞定的话,肯定需要一个指针指向第K个数的地址。
- 若想保证是第K个数,必须当时结束链表遍历,能确定单向链表结束遍历的方法就是一个指针指向最后一个节点。
- 此时不难发现这两个节点距离差为K。
- 第一次循环K次,是领先的指针移动到第K个节点,然后在循环的时候同时移动两个指针相同步速,一定能指向倒数第K个数字
实现代码
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* FindKthToTail(ListNode* pListHead, unsigned int k)
{
//链表为空 结束
if(pListHead==NULL||k==0)
{
return 0;
}
ListNode *pAhead =pListHead;
ListNode *pBehind =NULL;
for(unsigned int i =0;i<k-1;++i)
{
if(pAhead->next!=NULL)
pAhead=pAhead->next;
else
{
return NULL;
}
}
pBehind=pListHead;
while(pAhead->next!=NULL)
{
pAhead=pAhead->next;
pBehind=pBehind->next;
}
return pBehind;
}
};
网友评论