【问题描述】
【2009 年第 42题】已知一个带有表头结点的单链表,结点结构为(data,link),假设该链表只给出了头指针 list。在不改变链表的前提下,请设计一个尽可能高效的算法,查找链表中倒数第k个位置上的结点(k为正整数)。若查找成功,算法输出该结点的data域的值,并返回1;否则,只返回0。
【参考代码】
typedef struct LNode
{
int data;
struct LNode* link;
}LNode, * LinkList;
int find(LinkList &list, int k)
{
int n;
LinkList p, q;
n = 0;
p = list->link;
q = list->link;
while (p)
{
n++;
if (n > k) q = q->link;
p = p->link;
}
if (n >= k)
{
printf("%d", q->data);
return 1;
}
if (n < k) return 0;
}
【代码解析】
此题针对考研数据结构,采用伪代码,主要理解代码逻辑。
此题算为简单题,为了保证时间复杂度尽量的小,可以定义一个倒数k位的指针。