花了一小时,终于理解了些。
记住一点,指针指向data(元素也叫值!引用地址)
不多说,上代码
domain
package domain;
public class HeroNode2 {
public int no;
public String name;
public String nickname;
public HeroNode2 next;
public HeroNode2 pre;
public HeroNode2(int no,String name,String nickname){
this.no=no;
this.name=name;
this.nickname=nickname;
}
@Override
public String toString() {
return "HeroNode[no+"+no+"+name+"+name+"+nickname+"+nickname+"]";
}
}
addOrder是顺序插入
package List;
import domain.HeroNode;
import domain.HeroNode2;
public class DoubleLinkedList {
private HeroNode2 head = new HeroNode2(0, "", "");
public HeroNode2 getHead() {
return head;
}
public void list() {
if (head.next == null) {
System.out.println("链表为空");
return;
}
HeroNode2 temp = head.next;
while (true) {
if (temp == null) {
break;
}
System.out.println(temp);
temp = temp.next;
}
}
public void add(HeroNode2 heroNode2) {
HeroNode2 temp = head;
while (true) {
if (temp.next == null) {
break;
}
temp = temp.next;
}
temp.next = heroNode2;//后指前
heroNode2.pre = temp;//前指后
}
//第二种方法添加英雄,根据排名插入
public void addByOrder(HeroNode2 heroNode) {
HeroNode2 temp = head;
boolean flag = false;
while (true) {
if (temp.next == null) {
break;//最后
}
if (temp.next.no > heroNode.no) {
break;
} else if (temp.next.no == heroNode.no) {
//说明要添加的编号已经存在
flag = true;
break;
}
temp=temp.next;//后移
}
if (flag){
System.out.println("准备插入的英雄编号已经存在了,不能加入"+heroNode.no);
}else {
if (temp.next!=null){
heroNode.next=temp.next;
temp.next.pre=heroNode;
temp.next=heroNode;
heroNode.pre=temp;
}else {
temp.next = heroNode;//后指前
heroNode.pre = temp;//前指后
}
}
}
public void update(HeroNode2 heroNode2) {
if (heroNode2.next == null) {
System.out.println("链表为空");
return;
}
HeroNode2 temp = head.next;
boolean flag = false;
while (true) {
if (temp == null) {
break;
}
if (temp.no == heroNode2.no) {
flag = true;
break;
}
temp = temp.next;
}
if (flag) {
temp.name = heroNode2.name;
temp.nickname = heroNode2.nickname;
} else {
System.out.println("没有找到指定编号的节点,无法修改");
}
}
public void delete(int no) {
if (head.next == null) {
System.out.println("链表为空,无法删除");
return;
}
HeroNode2 temp = head.next;
boolean flag = false;
while (true) {
if (temp == null) {
break;
}
if (temp.no == no) {
flag = true;
break;
}
temp = temp.next;
}
if (flag) {
temp.pre.next = temp.next;//当前元素的后指针赋给前元素的后指针
//要判断是不是最后一个节点
if (temp.next != null) {
temp.next.pre = temp.pre;
}
} else {
System.out.println("要删除的节点不存在");
}
}
}
如果代码有问题,欢迎各位指正