题目描述:
实现思路:
1、先遍历链表,算出链表总长度,然后再计算出顺数第几个是对应节点,返回指向该节点的指针即可
2、快慢指针法 fast, slow, 首先让fast先走k步,然后fast,slow同时走,fast走到末尾时,slow走到倒数第k个节点。
代码实现:
1、
*
* @param pListHead ListNode类
* @param k int整型
* @return ListNode类
*/
struct ListNode* FindKthToTail(struct ListNode* pListHead, int k ) {
if(pListHead==NULL)
return NULL;
struct ListNode* cur=pListHead;//单链表
int num=0;
while(cur)
{
cur=cur->next;
num++;
}
if(k>num)
return NULL;//k比链表元素总数还大
int n=num-k;
cur=pListHead;
while(n--)
{
cur=cur->next;
}
return cur;
}
2、
class Solution {
public:
ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
struct ListNode* slow = pListHead;
struct ListNode* fast = slow;
while(k--)
{
if(fast)
fast = fast->next;
else
return NULL;
}
while(fast)
{
slow = slow->next;
fast = fast->next;
}
return slow;
}
};