package linkedlist;
public class DoubleLinkedListDemo2 {
public static void main(String[] args) {
System.out.println("双向链表测试");
//创建节点
HeroNode2 hero1 = new HeroNode2(1, "宋江", "及时雨");
HeroNode2 hero2 = new HeroNode2(2, "卢俊义", "玉麒麟");
HeroNode2 hero3 = new HeroNode2(3, "吴用", "智多星");
HeroNode2 hero4 = new HeroNode2(4, "林冲", "豹子头");
//创建双向列表
DoubleLinkedList doubleLinkedList = new DoubleLinkedList();
doubleLinkedList.add(hero2);
doubleLinkedList.add(hero4);
doubleLinkedList.add(hero3);
doubleLinkedList.add(hero1);
doubleLinkedList.list();
//修改测试
System.out.println("————————————————————");
HeroNode2 heroNode2 = new HeroNode2(4, "公孙胜", "入云龙");
doubleLinkedList.upData(heroNode2);
doubleLinkedList.list();
//删除测试
System.out.println("————————————————————");
doubleLinkedList.der(3);
doubleLinkedList.list();
}
}
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;
}
//toString重写
@Override
public String toString() {
return "HeroNode{" +
"no=" + no +
", name='" + name + '\'' +
", nickName='" + nickName + '\'' +
'}';
}
}
//创建双向链表
class DoubleLinkedList{
//初始化
public HeroNode2 head=new HeroNode2(0,"","");
//遍历双向列表
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 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=temp.next;
}
if (flag){
System.out.printf("加入的英雄编号%d,已存在无法加入",heroNode.no);
}else {
//形成双向列表
heroNode.next=temp.next;
temp.next=heroNode;
heroNode.pre=temp;
}
}
//修改链表
public void upData(HeroNode2 heroNode){
if (head.next==null){
System.out.println("空链表");
return;
}
HeroNode2 temp=head.next;
boolean flag =false;//判断是否找到了该节点
while (true){
if (temp==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.print("没有找到");
}
}
//删除节点
//双向列表可以直接删除节点
public void der(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.print("不存在");
}
}
public void inquiry(int no){
}
}
Java数据结构与算法(双向链表的增删改查)
最新推荐文章于 2024-05-31 10:46:10 发布