Java数据结构—双向链表
Posted 之墨_
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java数据结构—双向链表相关的知识,希望对你有一定的参考价值。
分析
双向链表的遍历,添加,修改,删除的操作思路
- 遍历
方法和单链表一样,只是可以向前,也可以向后查找 - 添加 (默认添加到双向链表的最后)
(1)先找到双向链表的最后这个节点
(2)temp.next = newHeroNode;
(3)newHeroNode.pre = temp;
- 修改
思路和原来的单向链表一样. - 删除
(1) 因为是双向链表,因此,我们可以实现自我删除某个节点
(2) 直接找到要删除的这个节点,比如temp
(3)temp.pre.next = temp.next;
(4)temp.next.pre = temp.pre;
代码实现
遍历
// 遍历双向链表的方法
// 显示链表[遍历]
public void list(){
if(head.next == null){
System.out.println("链表为空");
return;
}
HeroNodePlus temp = head.next;
while (true){
if(temp == null){
break;
}
System.out.println(temp);
temp = temp.next;
}
}
添加
// 添加一个节点到双向链表的最后.
public void add(HeroNodePlus heroNode) {
HeroNodePlus temp = head.next;
while (true) {
if (head.next == null) {
break;
}
temp = temp.next;
}
temp.next = heroNode;
heroNode.pre = temp;
}
删除
// 从双向链表中删除一个节点,
// 说明
// 1 对于双向链表,我们可以直接找到要删除的这个节点
// 2 找到后,自我删除即可
public void del(int no) {
// 判断当前链表是否为空
if (head.next == null) {// 空链表
System.out.println("链表为空,无法删除") ;
return;
}
HeroNodePlus temp = head.next;
boolean flag = false;
while (true){
if(temp.no == no){
flag = true;
break;
}
if(temp.next == null){
break;
}
temp = temp.next;
}
if(flag){
temp.pre.next = temp.next;
if(temp.next != null){
temp.next.pre = temp.pre;
}
}else {
System.out.printf("要删除的 %d 节点不存在\\n", no);
}
}
}
修改
// 修改一个节点的内容, 可以看到双向链表的节点内容修改和单向链表一样
// 只是 节点类型改成 HeroNode2
public void update(HeroNodePlus heroNode){
if(head.next == null){
System.out.println("链表为空");
return;
}
HeroNodePlus temp = head.next;
boolean flag = false;
while (true){
if(temp.next == null){
break;
}
if(temp.no == heroNode.no){
flag = true;
break;
}
temp = temp.next;
}
if(flag) {
temp.name = heroNode.name;
temp.nickname = heroNode.nickname;
}else {
System.out.printf("没有找到 编号 %d 的节点,不能修改\\n", heroNode.no);
}
}
以上是关于Java数据结构—双向链表的主要内容,如果未能解决你的问题,请参考以下文章