【问题描述】

【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位的指针。

更多推荐