题目描述
输入一个链表,输出该链表中倒数第k个结点。
解题思路:建立两个指针,快慢指针法。链表类题注意要善于运用指针,维护我们想要保存的信息(节点)。
解题代码:
刚开始出错是因为没有注意到输入的k是无符号数,而自己写的代码while循环中k--,当k=0时,k--,k为4294967259(无符号的0xFFFFFFFF),因此while循环会一直进行。所以我们这里应该用for循环。
/*
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==nullptr||k==0)
return nullptr;
//双指针法
ListNode* p1=pListHead;
ListNode* p2=pListHead;
/* while(k>0)
{
if(p2==nullptr)
return nullptr;
p2=p2->next;
k--;
}*/
for(unsigned int i=0;i<k-1;++i)
{
if(p2->next!=nullptr)
p2=p2->next;
else
return nullptr;
}
while(p2->next!=nullptr)
{
p1=p1->next;
p2=p2->next;
}
return p1;
}
};