数据结构–链表
2016/6/1 20:09:05 SeventeenWen
链表分为两部分:
- 数据部分:存储数据的地方
- 地址部分:保存的是下一个节点的地址
链表只是逻辑上相连,实际内存上是不相连的
单向链表
链表的添加
- 分配内存空间,没有任何值。
- 给要添加的节点赋值。将空值赋给节点的指针域。
- 将前一个节点的指针指向添加的节点
链表的插入
- 分配一块内存空间,没有任何值。
- 给链表的保存数据值的域赋值。
- 找到要插入的逻辑位置,就是找到要插入的地方。
- 修改指针指向的位置。
链表的删除
链表删除操作包括删除表头和返回数据,有几种可能
1.删除头节点(O(1))
- 第一个节点的数据暂存在成员变量中
- 指针Head指向第二个节点
- 第一个节点等待GC的回收
2.删除尾节点(O(n))
- 删除尾节点的数据。
- 调整指针位置,直接向后移动是不可能的,使用for循环从开始查找尾节点的指针位置。
- 尾节点等待GC回收
3.删除任意节点
- for循环整个链表,找到要删除节点的位置。
- 再次for循环整个链表,找到要删除节点的前一个节点,是前一节点指向当前节点的下一节点。
删除节点
使用两个指针,一个指向第一个节点,一个指向第二个节点,
- for循环,使两个指针都指向下一个节点,循环结束条件第二个指针指向了要删除的节点。
- 第一个节点指向第二个节点指向的下一个。
- 要删除的节点等待GC回收
双向链表
定义:双向链表有两个指针域,一个指向前一个,一个指向后一个。
添加节点:
- 初始化链表的三个域。
- 给节点赋值。
- 指向下一个域的指针置空。
- 给定指向上一个域的指针
- 尾指针指向新节点
- 前驱节点指向新节点
删除节点
找到要删除的节点,将指向它的上一个节点的指针域的值指向删除节点的下一个节点,隔离要删除的节点。等待GC回收