链表——求链表中倒数第k个节点
链表中倒数第k个结点
http://www.nowcoder.com/questionTerminal/529d3ae5a407492994ad2a246518148a
思路:
①我第一次做这题,选择是将整个链表反转,再输出第k个,但是有个问题就“第k个节点”的意思是从第k个到最后的所有链表。
例:1->2->3->4的第二个节点是2->3->4。
所以反转链表不行,但是如果是求第k个节点的值,就没有问题了。
②采用快慢指针
这种方法以前在做求链表中间节点时遇到过。
设定两个指针,一个比另一个快k个,这样,当fast到达尾(null)时,另一个就处于倒数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||k<=0) return nullptr;
ListNode* fast = pListHead;
ListNode* slow = pListHead;
while(k--)
{
if(fast)
{
fast=fast->next;
}
else
{
return nullptr;
}
}
while(fast)
{
slow = slow->next;
fast = fast->next;
}
return slow;
}
};```