双向链表示意图
双向列表由三部分组成
链表头(由结点担任,它的前一个结点是null)
结点
链表尾(由结点担任,它的后一个结点是null)
结点之间按照线性顺序,指向前一个结点,指向后一个结点。 就构成了链表
比如 饺子的下一个结点是汤圆
那么汤圆的上一个结点就必须是饺子,这样他两前和后才都有关联。
每一个结点由三个参数构成
- 数据
- 上一个结点坐标
- 下一个结点坐标
定义一个Node_结点类
class Node_{
public Object item; // 存放数据
public Node_ next; //指向后一个节点
public Node_ pre; // 指向前一个节点
public Node_(Object item) {
this.item = item;
}
@Override
public String toString() {
return "item = " + item ;
}
}
组成链表
Node_ tom = new Node_("tom");
Node_ jack = new Node_("jack");
Node_ bob = new Node_("bob");
// 连接三个结点,形成双向链表
// ton -> jack -> bob
tom.next = jack;
jack.next = bob;
// bob -> jack -> tom
bob.pre = jack;
jack.pre = tom;
// 让first 指向tom,表示作为链表头结点
Node_ first = tom;
// 让last 指向bob,表示作为列表尾结点
Node_ last = bob;
从头到尾遍历
while (first != null){
System.out.println(first);
first = first.next;
}
从尾到头遍历
while (last != null){
System.out.println(last);
last = last.pre;
}
往链表里插入数据
就是修改结点之间的两个指向,
例子,往A,B,中间插入一个C
只需要断开A的下一个结点指向,B的上一个结点指向即可
让A的下一个结点直接指向C,C的下一个结点指向B(图中未画出),C的上一个结点直接指向A。B的上一个结点指向C(图中未画出) 即可
// 插入数据
Node_ mask = new Node_("mask");
mask.next = bob;
mask.pre = jack;
jack.next = mask;
bob.pre = mask;
标签:Node,结点,指向,链表,jack,双向,bob
From: https://www.cnblogs.com/24cuo/p/16898108.html