双向链表
单链表的缺点:
1.只能沿着一个方向遍历,不能回到上一个链节点
总结
1.双向链表添加或删除一个节点时,要处理四个链接点的引用
2.在链表尾部和中间操作有区别,需要处理下一个节点是否为空
3.双向链表需要两个指针prev和next,prev指向前一个节点,next指向下一个节点
示意图
class DoubleLinkedList {
//双向链表初始化一个头节点
DoubleNode head = new DoubleNode("");
public void display() {
DoubleNode tmp = head;
while (true) {
//判断链表是否为空
if (tmp.next == null) {
break;
}
tmp = tmp.next;
System.out.println(tmp);
}
}
//在链表尾部插入一个节点
public void add(DoubleNode addNode) {
DoubleNode tmp = head;
while (true) {
if (tmp.next == null) {
break;
}
tmp = tmp.next;
}
tmp.next = addNode;
addNode.pre = tmp;
}
//根据name删除一个节点
public void del(String name) {
DoubleNode tmp = head;
boolean flag = false;
if (head.next == null) {
System.out.println("链表为空");
return;
}
while (true) {
if (tmp.next == null) {
break;
}
if (tmp.name == name) {
flag = true;
break;
}
tmp = tmp.next;
}
if (flag) {
tmp.pre.next = tmp.next;
//如果要删除的节点刚好是最后一个节点,则next为空
if (tmp.next != null) {
tmp.next.pre = tmp.pre;
}
}
}
}
class DoubleNode {
public String name;
public DoubleNode next;
public DoubleNode pre;
public DoubleNode(String name) {
this.name = name;
}
@Override
public String toString() {
return "DoubleNode[name=" + name + "]";
}
}