题目描述
输入一个链表,输出该链表中倒数第k个结点。
分析:
两个指针pointResult和pointEnd一起指向头结点,然后根据k,移动pointEnd,使pointResult和pointEnd的距离为k-1。然后同时移动pointResult和pointEnd,当pointEnd指向最后一个结点时,pointResult指向倒数第k个结点。这种方法只用遍历一次链表。
代码:
ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
if(pListHead==nullptr || k<1) return nullptr;
ListNode* pointResult = pListHead;
ListNode* pointEnd = pListHead;
int i;
for(i=1;i<k;i++){
if(!pointEnd->next) break;
pointEnd = pointEnd->next;
}
if(i!=k) return nullptr;
while(pointEnd->next){
pointEnd = pointEnd->next;
pointResult = pointResult->next;
}
return pointResult;
}