单链表的操作和复杂度分析

1.单链表的一些基本操作:

  • p = L;//p指向头结点
  • s = L -> next;//s指向首元结点
  • p = p - > next;p指向下一结点

2.清空链表:链表中无元素存在,成为空链表(头指针和头结点仍然在)
在每次删除前先获取下一个结点的地址,直接删除就无法获取到后续结点的地址
结束条件:p == null,循环条件:p != null


3.求单链表表长:依据清空列表的操作,定义一个变量i = 0 ,在每次获取结点指针域后判断是否为空,不为空则 i+1 , 然后依次获取后续结点的指针域直到p == null


4.单链表的取值:从链表的头指针出发,顺着链域next逐个结点向下搜素,直至搜索到第i个结点为止。如果i的大小超过链表的长度或者小于1,就不必查找了。
5.单链表的查找:

  • 按值查找(返回地址):根据指定数据获取该数据所在的位置(地址)依次和获取指针p的data值(内容)与查找数据对比然后返回指针p,否则指针所指结点为空时结束返回指针p=null
  • 按值查找(返回元素序号):
    在判断时加入一个计数值i,每次指针值与查找值对比时i+1,然后返回i,否则返回0

6.单链表的插入操作:
不能直接互换,得加一个中间指针变量,否则后一结点ai的地址无法获取。


7.单链表的删除操作: p -> next = p -> next -> next,有需要可以先保留被删除的元素
首先找到前驱节点的判断条件是p -> next && j < i-1,第一个条件是判断指针是否为null第二个条件判断是否为删除元素的前趋结点

8.时间复杂度分析:

  • 查找:线性链表只能顺序存取,查找时要从头指针找起,查找的时间复杂度为O(n)
  • 插入和删除:
    插入操作,若给定前驱节点,则时间复杂度均为O(1)。否则只能按序或按值查找前驱节点,时间复杂度为O(n)。
    单向链表要删除某一节点时,必须要先通过遍历的方式找到前驱节点(通过待删除节点序号或按值查找)。若仅仅知道待删除节点,是不能知道前驱节点的,故单链表的增删操作复杂度为O(n)。
  • 17
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值