输入一个链表,输出该链表中倒数第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) {
int n=0;
ListNode* p1=pListHead;//克隆,链表改变后不会复原
ListNode* p2=pListHead;
while(p1)
{
n++;
p1=p1->next;
}
if(k>n) return nullptr;//考虑边界条件
for(int i=1;i<n-k+1;i++)
{
p2=p2->next;
}
return p2;
}
};
方法二:双指针
ListNode* p1=pListHead;//克隆,链表改变后不会复原
ListNode* p2=pListHead;
for(int i=0;i<k;i++)
{
//考虑溢出
if(p1==NULL) return nullptr;
p1=p1->next;
}
for(int i=0;p1!=NULL;i++)
{
p1=p1->next;
p2=p2->next;
}
return p2;