Java数据结构双向链表 作者:哇塞大嘴好帥

Java数据结构双向链表 作者:哇塞大嘴好帥

作者:哇塞大嘴好帥(哇塞大嘴好帅)

1.双向链表

​ 双向链表也是链表的一种,他有2个指针一个指向下一个节点,一个指向前一个节点.

2.双向链表-增

/**
 * 增加一个节点
 * @param linkedlist    需要进行操作的链表
 * @param node          要添加的元素
 */
public void putNode(Node linkedlist, Node node){
    //创建临时遍历, 用于遍历链表
    Node temp = linkedlist;

    while (true){
        //如果到了链表尾部
        if (temp.next == null){
            return;
        }

        if (node.no < temp.next.no){
            break;
        }

        //指针下移
        temp = temp.next;
    }


    //插入节点
    node.next = temp.next;
    node.pre = temp;
    temp.next = node;
}

​ 首先创建一个临时变量,用于遍历链表使用。

​ 接下来进入死循环,如果当前节点的下一个节点**==NULL** 就代表当前链表已经遍历完毕,节点后方没有数据了,则return

​ 接下来进行判断,如果 node.no < temp.next.no 就代表的了找到了要添加节点的存放的位置。

​ 接下来要添加的节点的下一个等于当前节点的下一个节点当前节点的前一个节点等于当前节点。

​ 如果以上判断都不满足就指针下移,查看下一个节点

3.双向链表-改

/**
 * 修改节点
 * @param linkedlist    需要进行从操作的链表
 * @param node          需要修改的信息
 */
public void LinkedListUpdate(Node linkedlist,Node node){
    //创建临时遍历, 用于遍历链表
    Node temp = linkedlist.next;

    while (true){
        if (temp == null){
            System.out.println("没有找到");
            return;
        }

        if (temp.no == node.no){
            temp.name = node.name;
            break;
        }


        //指针下移
        temp = temp.next;
    }
}

​ 首先创建一个临时遍历用于遍历链表,

​ 接下来进入死循环,如果当前节点等于NULL就证明当前链表遍历完了,后面没有数据了直接return。 如果当前节点的no与要修改的节点no一致就证明找到了我们要修改的指定元素。接下来只要把当前元素的name修改为要修改元素的name即可

​ 如果if都不满足就指针下移。

4.双向链表-删

   /**
     * 删除指定节点
     */
    public void  del(Node linkedlist,int index){
        //创建临时遍历, 用于遍历链表
        Node temp = linkedlist.next;

        if (head.next == null){
            System.out.println("当前链表为NULL");
            return;
        }

        while(true){
            if (temp == null){
                System.out.println("没有查找到指定下标");
                break;
            }

            if (temp.no == index){
                temp.pre.next = temp.next;
                //如果不是最后一个节点
                if (temp.next != null){
                    temp.next.pre = temp.pre;
                }
            }

            //指针下移
            temp = temp.next;
        }
    }
}

​ 首先创建一个建立临时遍历用于遍历链表

​ 接下来进行判断头节点的下一个是否为NULL如果为NULL就代表当前链表没有数据直接return

​ 之后进入循环 如果当前节点等于空就证明没有找到指定下标,如果当前节点的no与我们要删除节点的no相同就代表了我们找到了,我们就把当前节点的上一个节点的下一个 等于 当前节点的下一个

​ 接下来进行判断,如果当前节点的下一个不等于NULL当前节点的下一个的上一个节点等于 当前节点上一个, 为什么要有这个判断,因为如果是最后一个节点进行 temp.next.pre = temp.pre; 就会爆空指针

5 双向链表-查

/**
 * 遍历链表
 * @param linkedlist 需要进行操作的链表
 */
public void select(Node linkedlist){
    //创建临时遍历, 用于遍历链表
    Node temp = linkedlist.next;

    if (head.next == null){
        System.out.println("您的链表为NULL");
        return;
    }

    while (true){
        if (temp == null){
            break;
        }
        //System.out.println("pre:"+temp.pre);
        System.out.println("dangqian:"+temp);

        //指针下移
        temp = temp.next;
    }
}

​ 首先创建一个临时遍历用于遍历链表,接下来判断链表是否拥有数据,如果没有直接return,如果判断不成立就打印当前对象,在指针下移

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

哇塞大嘴好帅(DaZuiZui)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值