题目描述
输入一个链表,输出该链表中倒数第k个结点。
解题思路
直接思路是遍历链表,遍历的时候压栈,遍历完后出栈,倒数出k
个就行。但这样肯定是拿不到Offer
的。
可以这么做,拿两个指针从头遍历,让一个先走k-1
步,然后两个指针再一起走,当先走的指针遍历到尾结点时,后走的那个即为所求。
有几个点需要注意:
- 输入空链表的处理
k
为0
的情况k
大于链表的长度
代码实现
class Solution {
public:
ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
if(!pListHead||k==0)return NULL;
ListNode *p,*q;
p=pListHead;
for(unsigned int i=0;i<k;i++){
if(p){
p=p->next;
}else{
return NULL;
}
}
q=pListHead;
while(p){
p=p->next;
q=q->next;
}
return q;
}
};
运行时间:2ms
占用内存:376k