Skip to content
On this page

数据结构_单向链表_读取操作


标签:算法/list  

思路与分析

链表没法直接从下标返回存储数据,需要通过遍历的方式找到存储位置的数据。

如果要返回第 i 个位置的数据:

  1. 使用指针 p 指向第一个节点位置,通过计数器 j 来记录步数;
  2. 指针通过 p = p->next 向后移动,步数自增;
  3. 指针先空的话返回查找失败(如果头节点保存了长度,可以在遍历前检查)
  4. 步数达到目标位置读取当前节点数据

代码实现

c
int GetElement(linkedlist l, int i, datatype *e) {
	if (l == NULL || l->len == 0 || i >= l->len || i < 0)
		return -1;
	linkedlist p = l->next;
	for (int j = 0; j < i; j++)
	{
		p = p->next;
	}
	*e = p->data;	
	return 0;
}
  • 在代码最前面我们判断了链表是否空,下标是否越界,这样我们在后面不用担心遍历到的节点是否是空;
  • 遍历的起点选在了第一个链表节点,而不是头节点,这和后面循环对应,你也可以设计 j <= i 让游标多走一步(如果对范围很困惑,不妨用 0 和 1 试着带入看看,如果合理,那么可推理后面也是合理的);
  • 我们通过 datatype 的指针来读取数据,因为函数本身返回的是运行状态(0成功,-1失败),另一种方法是传入回调函数,直接通过回调处理数据

Last updated: