输入一个单链表,输出它的的倒数第K个结点
题目来源:牛客网https://www.nowcoder.com/practice/529d3ae5a407492994ad2a246518148a?tpId
题目分析:
因为是单链表,所以只能从前往后,不能从后往前。一个结点数为n的链表它的倒数第k个结点,可以发现是正数的n-k+1个结点。
特别注意
- 当链表为空的情况
- 当k大于链表的总结点数
- 当k=0时,因为k的数据类型是无符号整型,当k-1时,得到的是无符号的0xFFFFFFFF,而不是-1,这时候循环的次数就会变的很大很大。
分析过程
/*
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 NULL;
}
ListNode* cur=pListHead;
ListNode* prev=pListHead;
for(unsigned int i=0; i<k-1;i++)
{
if(cur->next != NULL)
cur=cur->next;
else
return NULL;
}
while(cur->next!=NULL)
{
cur=cur->next;
prev=prev->next;
}
return prev;
}
};