单链表的读取第i个元素的代码实现

单链表的获取第i个元素

在单链表中,由于第i个元素到底在哪?我们一开始没办法知道,必须得从第一个结点开始找。
算法思路:
1.声明一个结点p指向链表第一个结点,初始化j从1开始;
2.当j<i,就遍历链表,让p的指针向后移动,不断指向一下结点,j+1;
3.若到链表末尾p为空,则说明第i个元素不存在;
4.否则查找成功,返回结点p的数据

C语言
typedef int Status;

//可以用C语言结构指针来描述单链表:
typedef struct Node
{
	ElemType data;   //数据城
	struct Node*Next;//指针域
}Node  :
typedef struct Node* LinkList;	//Node*的别名是LinkList,Node*是结构体指针
LinkList p;

Status  GetElemLinkList(LinkList l,i,p,int *e)
{
	char j;
	p=p->Next;	//指向链表的第一个元素
	for (j = 1; j < i; ++j)
	{
		p=p->Next;
		if (p==Null)		//链表的长度小于i
		{
			return err;      
		}
	}
	e=&(p->Next);
	return *e;
}

读取算法的时间复杂度取决于i的位置,最好的时间复杂度是O(1)最坏的是O(n),平均是O(n)。
其核心思想叫做“工作指针后移”,这其实也是很多算法的常用技术。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值