思路分析:
- 遍历方式和单链表一样,可以向前也可以向后查找
- 添加(默认添加到双向链表最后) :
- 先找到双向链表最后这个节点
- temp.next=newHeroNode
- new HeroNode.pre=temp;
- 修改思路和原来的单向链表思路一样
- 删除
- 双向链表,因此我们可以实现自我删除
- 直接找到要删除的节点,比如temp
- temp.pre.next=temp.next
- temp.next.pre=temp.pre
下面的代码和老师的思路不太一样,不是默认添加删除末尾元素,而是任意一个位置元素,可能代码有些会有点问题
package com.ran;
public class hello {
public static void main(String[] args) {
HeroNode hero1= new HeroNode(1, "qqq", "qqq");
HeroNode hero2= new HeroNode(2, "qqq", "qqq");
HeroNode hero3= new HeroNode(3, "qqq", "qqq");
HeroNode hero4= new HeroNode(4, "qqq", "qqq");
DoubleLinkedList shuangxiang = new DoubleLinkedList();
shuangxiang.zeng(hero2);
shuangxiang.zeng(hero3);
shuangxiang.zeng(hero1);
shuangxiang.zeng(hero4);
shuangxiang.shan(1);
shuangxiang.gai(new HeroNode(2,"aaa","aaa"));
shuangxiang.list();
}
}
class DoubleLinkedList{
private HeroNode head=new HeroNode(0,"","");
public HeroNode getHead() {
return head;
}
public void list(){
HeroNode temp=head;
while (true){
if(temp.next==null){
break;
}
temp=temp.next;
System.out.println(temp);
}
temp=temp.next;
}
public void zeng(HeroNode heroNode){
HeroNode temp=head;
boolean qq=false;
while (true){
if(temp.next==null){
break;
}
if(temp.next.no==heroNode.no){
qq=true;
break;
}
if(temp.next.no>heroNode.no){
break;
}
temp=temp.next;
}
if(qq){
System.out.println("有了");
}else{
heroNode.next=temp.next;
temp.next=heroNode;
temp.next.pre = heroNode;
heroNode.pre=temp;
}
}
public void shan(int no){
HeroNode temp=head.next;
Boolean qq=false;
while (true){
if (temp==null){
break;
}
if(temp.no==no){
qq=true;
break;
}
temp=temp.next;
}
if(qq){
temp.pre.next=temp.next;
if(temp.next!=null){
temp.next.pre=temp.pre;
}
}
else {
System.out.println("没有找到");
}
}
public void gai(HeroNode heroNode){
HeroNode temp=head;
boolean qq=false;
while (true){
if (temp.next==null){
break;
}
if(temp.next.no==heroNode.no){
qq=true;
break;
}
temp=temp.next;
}
if(qq){
temp.next.name=heroNode.name;
temp.next.chuohao=heroNode.chuohao;
}else {
System.out.println("没找到");
}
}
}
//创建双向链表
class HeroNode{
public int no;
public String name;
public String chuohao;
public HeroNode next;
public HeroNode pre;
public HeroNode(int no, String name, String chuohao) {
this.no = no;
this.name = name;
this.chuohao = chuohao;
}
@Override
public String toString() {
return "HeroNode{" +
"no=" + no +
", name='" + name + '\'' +
", chuohao='" + chuohao + '\'' +
'}';
}
}
代码运行效果如下: