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)。