Java 双向链表模拟

单向链表查找只能是一个方向,而双向链表可以向前或向后查找
单向链表不能自我删除,需要靠辅助结点,需要找到待删除节点的前一个节点,而双向链表可以自我删除

class DTeam {
    int no;
    String leader;

    public DTeam(int no, String leader) {
        this.no = no;
        this.leader = leader;
    }

    @Override
    public String toString() {
        return "DTeam{" +
                "no=" + no +
                ", leader='" + leader + '\'' +
                '}';
    }
}

class DTeamNode {
    DTeam dTeam;
    DTeamNode prev;
    DTeamNode next;

    public DTeamNode(DTeam dTeam) {
        this.dTeam = dTeam;
    }
}

class DTeamNodeList {
    private DTeamNode headNode = new DTeamNode(null);

    public void add(DTeam newDTeam) {
        DTeamNode newDTeamNode = new DTeamNode(newDTeam);
        DTeamNode curNode = headNode;
        while(curNode.next != null) {
            curNode = curNode.next;
        }
        curNode.next = newDTeamNode;
        newDTeamNode.prev = curNode;
    }

    public void addByOrder(DTeam newDTeam) {
        DTeamNode newDTeamNode = new DTeamNode(newDTeam);
        DTeamNode curNode = headNode;
        while(curNode.next != null) {
            if(curNode.next.dTeam.no == newDTeam.no) {
                System.out.println("编号已存在,添加失败");
                return;
            }
            if(curNode.next.dTeam.no > newDTeam.no) {
                break;
            }
            curNode = curNode.next;
        }
        if(curNode.next != null) {
            curNode.next.prev = newDTeamNode;
        }
        newDTeamNode.next = curNode.next;

        curNode.next = newDTeamNode;
        newDTeamNode.prev = curNode;
    }

    public void update(DTeam newDTeam) {
        DTeamNode newDTeamNode = new DTeamNode(newDTeam);
        DTeamNode curNode = headNode.next;
        while(curNode != null) {
            if(curNode.dTeam.no == newDTeam.no) {
                break;
            }
            curNode = curNode.next;
        }
        if(curNode == null) {
            System.out.println("改编号不存在,修改失败");
            return;
        }
        curNode.dTeam.leader = newDTeam.leader;
    }

    public void deleteNode(int no) {
        DTeamNode curNode = headNode.next;
        while(curNode != null) {
            if(curNode.dTeam.no == no) {
                break;
            }
            curNode = curNode.next;
        }
        if(curNode == null) {
            System.out.println("改编号不存在,删除失败");
            return;
        }
        curNode.next.prev = curNode.prev;
        curNode.prev.next = curNode.next;
    }

    public void listNodes() {
        DTeamNode curNode = headNode.next;
        while(curNode != null) {
            System.out.println(curNode.dTeam);
            curNode = curNode.next;
        }
    }
}




public class DoubleLinkedDemo {

    public static void main(String[] args) {
        DTeamNodeList teamNodeList = new DTeamNodeList();
        DTeam team1 = new DTeam(1, "山本元柳斎重国");
        DTeam team4 = new DTeam(4, "卯之花烈");
        DTeam team6 = new DTeam(6, "朽木白哉");
        DTeam team8 = new DTeam(8, "京乐春水");
        DTeam team10 = new DTeam(10, "日番谷冬狮郎");
        DTeam team13 = new DTeam(13, "浮竹十四郎");
        DTeam team13_new = new DTeam(13, "朽木露琪亚");

        teamNodeList.add(team1);
        teamNodeList.add(team4);
        teamNodeList.add(team6);
        teamNodeList.add(team13);

        System.out.println("============add============");
        teamNodeList.listNodes();
//        Team{no=1, leader='山本元柳斎重国'}
//        Team{no=4, leader='卯之花烈'}
//        Team{no=6, leader='朽木白哉'}
//        Team{no=13, leader='浮竹十四郎'}

        System.out.println("============addByOrder============");
        teamNodeList.addByOrder(team8);
        teamNodeList.listNodes();
//        Team{no=1, leader='山本元柳斎重国'}
//        Team{no=4, leader='卯之花烈'}
//        Team{no=6, leader='朽木白哉'}
//        Team{no=8, leader='京乐春水'}
//        Team{no=13, leader='浮竹十四郎'}

        System.out.println("============update============");
        teamNodeList.update(team13_new);
        teamNodeList.listNodes();
//        Team{no=1, leader='山本元柳斎重国'}
//        Team{no=4, leader='卯之花烈'}
//        Team{no=6, leader='朽木白哉'}
//        Team{no=8, leader='京乐春水'}
//        Team{no=13, leader='朽木露琪亚'}

        System.out.println("============deleteNode============");
        teamNodeList.deleteNode(4);
        teamNodeList.listNodes();
//        Team{no=1, leader='山本元柳斎重国'}
//        Team{no=6, leader='朽木白哉'}
//        Team{no=8, leader='京乐春水'}
//        Team{no=13, leader='朽木露琪亚'}

    }

}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值