剑指Offer_编程题
链表中倒数第k个结点
输入一个链表,输出该链表中倒数第k个结点
//链表节点
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};
//结点输出
ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
ListNode* p,*q;
p = q = pListHead;
int i=0;
for(;p!=NULL;i++){
if(i>=k)
q = q->next;
p = p->next;
}
if(i<k)
return NULL;
return q;
}
分析:
两个指针p、q均遍历链表:指针p从头遍历到尾;指针q当i > k时才开始遍历,此时指针p、q一直相差k,当指针p到达链表尾部时,指针q所在位置即为链表倒数第k个结点.