![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/cbafef510bb6434cb36bf05d4dd32c5d.png)
流程:
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/be7426b1c8ddaf4a8bcf2bfd064b7798.png)
双链表的应用实例
1. 双链表的遍历,增加,修改,删除思路:
- 遍历 方和 单链表一样,只是可以向前,也可以向后查找
- 添加(默认添加到双向链表的最后):
(1) 先找到双向链表的最后这个节点
(2) temp.next = newHeroNode
(3) newHeroNode.pre = temp; - 修改 思路和 原来的单向链表一样.
- 删除:
(1) 因为是双向链表,因此,我们可以实现自我删除某个节点
(2) 直接找到要删除的这个节点,比如temp
(3)temp不是最后一个节点时:
temp.pre.next = temp.next
temp.next.pre = temp.pre;
(4) temp是最后一个节点时:
temp.pre.next = null;
2. 双链表的遍历,增加,修改,删除代码实现:
public class DoubleLinkedList {
private Node head = new Node(0, "", "");
public void list() {
Node temp = head.next;
if (temp == null) {
System.out.println("链表为空");
} else {
while (true) {
if (temp == null) break;
System.out.println(temp);
temp = temp.next;
}
}
}
public void add(Node node) {
Node temp = head;
while (true) {
if (temp.next == null) break;
temp = temp.next;
}
temp.next = node;
node.pre = temp;
}
public void updata(Node node) {
Node temp = head.next;
if (temp == null) {
System.out.println("空链表");
} else {
while (true) {
if (temp.num == node.num) {
temp.name = node.name;
temp.nickname = node.nickname;
break;
} else if (temp == null) {
System.out.println("没有该编号的节点");
break;
} else {
temp = temp.next;
}
}
}
}
public void delete(int i) {
Node temp = head.next;
while (true) {
if (temp.num == i && temp.next != null) {
temp.next.pre = temp.pre;
temp.pre.next = temp.next;
break;
} else if (temp.num == i && temp.next == null) {
temp.pre.next = null;
break;
} else if (temp == null) {
System.out.println("未找到该节点");
break;
} else {
temp = temp.next;
}
}
}
}