public class DoubleLinkedList {
public static void main(String[] args) {
HeroMan hero1 = new HeroMan(1, "冷清秋", "金燕西");
HeroMan hero2 = new HeroMan(2, "柯南", "小兰");
HeroMan hero3 = new HeroMan(3, "基德", "青子");
DoubleLinked doubleLinked = new DoubleLinked();
/* doubleLinked.addLinked1(hero1);
doubleLinked.addLinked1(hero2);
doubleLinked.addLinked1(hero3);*/
doubleLinked.addByOrder(hero2);
doubleLinked.addByOrder(hero3);
doubleLinked.addByOrder(hero1);
HeroMan hero4 = new HeroMan(3, "黑羽", "中森");
doubleLinked.update(hero4);
doubleLinked.del(2);
doubleLinked.list();
}
}
class DoubleLinked {
private static HeroMan head = new HeroMan(0, "", "");
public void list() {
if (head.next == null) {
System.out.println("双向链表为空");
}
HeroMan temp = head;
while (true) {
if (temp.next == null) {
return;
}
temp = temp.next;
System.out.println(temp);
}
}
// 添加
public void addLinked1(HeroMan hero) {
HeroMan temp = head;
while (true) {
if (temp.next == null) {
break;
}
temp = temp.next;
}
temp.next = hero;
hero.pre = temp;
}
// 按照顺序添加
public void addByOrder(HeroMan heroNode) {
HeroMan temp = head;
boolean flag = false;
while (true) {
if (temp.next == null) {
break;
}
if (temp.next.id > heroNode.id) {
break;
} else if (temp.next.id == heroNode.id) {
flag = true;
break;
}
temp = temp.next;
}
if (flag) {// 不能添加,说明编号存在
System.out.printf("准备插入的英雄的编号%d已经存在了,不能加入\n", heroNode.id);
} else {
if (temp.next == null) {
temp.next = heroNode;
heroNode.pre = temp;
} else {
//此处是在temp和temp.next中间添加数据
heroNode.next = temp.next;
temp.next.pre = heroNode;
temp.next = heroNode;
heroNode.pre = temp;
}
}
}
// 修改
public void update(HeroMan newHero) {
HeroMan temp = head;
boolean flag = false;
while (true) {
if (temp.next == null) {
break;
}
if (temp.next.id > newHero.id) {
break;
} else if (temp.next.id == newHero.id) {
flag = true;
break;
}
temp = temp.next;
}
if (flag) {
temp.next.name = newHero.name;
temp.next.nickname = newHero.nickname;
} else {
System.out.println("找不到该编号");
}
}
// 删除
public void del(int id) {
HeroMan temp = head.next;
boolean flag = false;
if (temp == null) {
System.out.println("链表为空");
return;
}
while (true) {
if (temp == null) {
break;
}
if (temp.id == id) {
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("找不到编号删除" + id);
}
}
}
class HeroMan {
public int id;
public String name;
public String nickname;
public HeroMan next;
public HeroMan pre;
public HeroMan(int hid, String hname, String hnickname) {
this.id = hid;
this.name = hname;
this.nickname = hnickname;
}
@Override
public String toString() {
return "[" +
"id=" + id +
", name='" + name + '\'' +
", nickname='" + nickname + '\'' +
']';
}
}
双向链表增(按顺序增加、增加到末尾)删改代码
于 2023-10-31 11:24:11 首次发布