设计一个尽可能高效的算法,通过链表的一次遍历,找到倒数第k个节点的位置
定义两个指针变量p和q,初始时均指向头结点的下一个节点,p指针沿着链表移动,当p指针移动到第k个节点时,q指针开始和p指针同步移动,当p指针移动到最后一个节点时,q指针所示节点为倒数第k个节点
typedef int ElemType; typedef struct LNode{ ElemType data; struct LNode* link; }LNode,*LinkList; int search_k(LinkList list,int k){ LNode *p=list->link,*q=list->link; int count=0; while(p!=NULL){ if(count<k){ k++; } else{ q=q->link; } p=p->link; } if(count<k){ return 0; } else{ print(q->data); return 1; } }