//双向链表
public class DoubleLinkedListDemo {
public static void main(String[] args) {
SuperHero1 hero1 = new SuperHero1(1,"aaa","aaaa");
SuperHero1 hero2 = new SuperHero1(2,"bbb","bbbb");
SuperHero1 hero3 = new SuperHero1(3,"ccc","cccc");
SuperHero1 hero4 = new SuperHero1(4,"ddd","dddd");
DoubleLinkedList linkedList=new DoubleLinkedList();
linkedList.addDoubleListByOrder(hero3);
linkedList.addDoubleListByOrder(hero4);
linkedList.addDoubleListByOrder(hero1);
linkedList.addDoubleListByOrder(hero2);
linkedList.list();
// System.out.println("修改后");
// linkedList.updateDoubleList(new SuperHero1(4,"eee","eeee"));
// linkedList.list();
//
// linkedList.deleteDoubleById(3);
// System.out.println("删除后的");
// linkedList.list();
}
}
class DoubleLinkedList{
private SuperHero1 head1 = new SuperHero1(0,null,null);
public SuperHero1 getHead(){
return head1;
}
//双向链表按照顺序添加插入节点
public void addDoubleListByOrder(SuperHero1 hero1){
SuperHero1 temp = head1;
boolean flag = false;
while (true){
if (temp.next == null){
break;
}
if (temp.next.id == hero1.id){
flag = true;
break;
}
if (temp.next.id>hero1.id){
break;
}
temp = temp.next;
}
if (flag){
System.out.println("已经存在相同的id");
}else {
if (temp.next !=null){
hero1.next = temp.next;
temp.next.pre = hero1;
}
temp.next = hero1;
hero1.pre = temp;
}
}
//双向链表的尾部添加
public void addHeroDouble(SuperHero1 hero1){
SuperHero1 temp = head1;
while (temp.next!=null){
if (temp.next.id == hero1.id){
System.out.println("已存在相同数据");
break;
}
temp=temp.next;
}
temp.next=hero1;
hero1.pre = temp;
}
//双向链表的修改
public void updateDoubleList(SuperHero1 hero1){
if (head1.next == null){
System.out.println("链表为空");
return;
}
SuperHero1 temp = head1.next;
boolean flag = false;
while (true){
if (temp.id == hero1.id){
flag = true;
break;
}
if (temp.next == null){
break;
}
temp=temp.next;
}
if (flag){
temp.name = hero1.name;
temp.nickName = hero1.nickName;
System.out.println("修改成功");
}else {
System.out.println("找不到该数据");
}
}
//双向链表的删除
public void deleteDoubleById(int id){
if (head1.next == null){
System.out.println("链表为空,无法删除");
return;
}
SuperHero1 temp = head1.next; //要删除的节点是temp节点
boolean flag = false;
while (true){
if (temp ==null){
break;
}
if (temp.id ==id){
flag =true;
break;
}
temp =temp.next;
}
if (flag){
temp.pre.next = temp.next; //temp的前一个节点的next 指向 temp的后一个节点
if (temp.next !=null){ // 判断是否是最后一个节点
temp.next.pre = temp.pre; //temp的后一个节点的 pre 指向 temp的前一个节点
}
System.out.println("删除成功");
}else {
System.out.println("不存在该节点");
}
}
//双向链表的遍历 和单链表一样的遍历
public void list(){
if (head1.next ==null){
System.out.println("链表为空");
return;
}
SuperHero1 temp =head1.next;
while (true){
if (temp == null){
break;
}else {
System.out.println(temp);
}
temp=temp.next;
}
}
}
class SuperHero1{
public int id;
public String name;
public String nickName;
public SuperHero1 next; //next 指向下一个节点
public SuperHero1 pre; //pre 指向前一个节点
public SuperHero1(int sid,String sname,String snickName){
this.id=sid;
this.name=sname;
this.nickName=snickName;
}
@Override
public String toString() {
return "SuperHero1{" +
"id=" + id +
", name='" + name + '\'' +
", nickName='" + nickName + '\'' +
'}';
}
}