剑指offer-链表中倒数第k个结点
题目描述
输入一个链表,输出该链表中倒数第k个结点。
解题思路
pOne指针先跑,并且记录节点数,当pOne指针跑了k-1个节点后,pTwo指针开始跑,
当pOne指针跑到最后时,pTwo所指指针就是倒数第k个节点
class Solution {
public:
ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
if(pListHead==NULL||k==0) return NULL;
ListNode*pOne=pListHead;
ListNode*pTwo=pListHead;
int i=1;
while(i<k){
if(pOne->next!=NULL)//一定要判断呀
pOne=pOne->next;
else
return NULL;
i++;
}
while(pOne->next!=NULL){
pOne=pOne->next;
pTwo=pTwo->next;
}
return pTwo;
}
};
优化版:
class Solution {
public:
ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
if(pListHead==NULL||k==0) return NULL;
ListNode*pOne=pListHead;
ListNode*pTwo=pListHead;
int i=1;
while(pOne->next!=NULL){
if(i>=k)
pTwo=pTwo->next;
pOne=pOne->next;
i++;
}
if(k>i) return NULL;//别忘了这个判断
return pTwo;
}
};