![](https://img.kancloud.cn/41/e0/41e066af9a6c25a24868d9667253ec98_1241x333.jpg)
*****
## 双向链表
接下来我们再来看一个稍微复杂的,在实际的软件开发中,也更加常用的链表结构:双向链表。
<br>单向链表只有一个方向,结点只有一个后继指针 next 指向后面的结点。而双向链表,顾名思义,它支持两个方向,每个结点不止有一个后继指针 next 指向后面的结点,还有一个前驱指针 prev 指向前面的结点。
![](https://img.kancloud.cn/cb/c8/cbc8ab20276e2f9312030c313a9ef70b_1142x399.jpg)
## 操作
* is_empty() 链表是否为空
* length() 链表长度
* travel() 遍历链表
* add(item) 链表头部添加
* append(item) 链表尾部添加
* insert(pos, item) 指定位置添加
* remove(item) 删除节点
* search(item) 查找节点是否存在