双向链表操作

2,双向链表介绍

1,双向链表的新增
/**
     * 实现双向链表的添加操作(不管编号顺序)
     *
     * @param headNode_02
     */
    public void addDoubleList(HeadNode_02 headNode_02) {
        HeadNode_02 temp = head;
        //遍历链表,找到最后一个节点
        while (true) {
            if (temp.next == null) {
                break;
            }
            temp = temp.next;
        }
        temp.next = headNode_02;
        headNode_02.prev = temp;
    }


 /**
     * 实现双向链表的添加操作(按照编号顺序添加)
     * @param headNode_02
     */
    public void addOrderDoubleList(HeadNode_02 headNode_02){
        HeadNode_02 temp=head;
        boolean flag=false;
        while (true){
            if(temp.next==null){
                break;
            }
            if(temp.next.no>headNode_02.no){
                break;
            }
            else if(temp.next.no==headNode_02.no){
                flag=true;
                break;
            }
            temp=temp.next;
        }
        if(flag){
            System.out.println("新增节点的标号已经存在"+headNode_02.no);
        }else{
           if(temp.next==null){
               temp.next=headNode_02;
               headNode_02.prev=temp;
           }else{
               headNode_02.prev=temp;
               temp.next.prev=headNode_02;
               headNode_02.next=temp.next;
               temp.next=headNode_02;
           }
        }
    }

2,双向链表的查找
 //获取链表的头节点
    public void listDoubleLink() {
        //判断链表是否为空
        if (head.next == null) {
            System.out.println("双向链表为空!");
            return;
        }
        HeadNode_02 temp = head.next;
        while (true) {
            if (temp == null) {//判断是否到了链表的最后
                break;
            }
            System.out.println(temp);
            temp = temp.next;//后移到下个节点,继续判断输出
        }
    }

3,双向链表的修改
 /**
     * 实现双向链表的修改操作
     *
     * @param headNode_02
     */
    public void updateDoubleList(HeadNode_02 headNode_02) {
        if (head.next == null) {
            System.out.println("双向链表为空!");
            return;
        }
        HeadNode_02 temp = head.next;
        boolean flag = false;
        while (true) {
            if (temp == null) {
                break;
            }
            if (temp.no == headNode_02.no) {
                flag = true;
                break;
            }
            temp = temp.next;
        }
        if (flag) {
            temp.name = headNode_02.name;
            temp.nameNick = headNode_02.nameNick;
        } else {
            System.out.println("修改的元素不存在于双向链表当中!");
        }
    }

4,双向链表的删除
/**
     * 实现双向链表的删除
     * 1,对应双向链表,我们可以直接找到对应的节点进行自我删除
     * 2,找到最后一个节点,删除即可
     *
     * @param no
     */
    public void deleteDoubleList(int no) {
        if (head.next == null) {
            System.out.println("双向链表为空!");
            return;
        }
        HeadNode_02 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.prev.next = temp.next;
            if (temp.next != null) {//前提是删除的节点不是最后一个节点
                temp.next.prev = temp.prev;
            }
        } else {
            System.out.println("双向链表中没有待删除的节点" + no);
        }
    }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值