双向链表简单代码实现

package com.structure.linkedList;

/*
    双向链表
 */
public class DubboLinkedListDemo {

    public static void main(String[] args) {
        DubboLinkedNode node1 = new DubboLinkedNode(1,"节点1");
        DubboLinkedNode node2 = new DubboLinkedNode(2,"节点2");
        DubboLinkedNode node3 = new DubboLinkedNode(3,"节点3");
        DubboLinkedNode node4 = new DubboLinkedNode(4,"节点4");
        DubboLinkedList list = new DubboLinkedList();
        list.add(node1);
        list.add(node2);
        list.add(node3);
        list.add(node4);
        list.showDubboLinked();
        DubboLinkedNode node5 = new DubboLinkedNode(4,"修改节点4");
        DubboLinkedNode node41 = list.update(node5);
        System.out.println("修改后的节点"+node41);
        list.showDubboLinked();
        System.out.println("删除后的链表:");
        list.delete(4);
        list.showDubboLinked();
    }


}

class DubboLinkedList{

    //定义头节点
    DubboLinkedNode headNode = new DubboLinkedNode(0,"头节点");

    //向尾部添加双向节点
    //思路:跟单向链表一样,定义一个临时节点存放
    public void add(DubboLinkedNode node){

        DubboLinkedNode temp = headNode;
        while (true){
            if(temp.nextNode==null){
                temp.nextNode = node;
                node.preNode = temp;
                break;
            }
            temp = temp.nextNode;
        }
    }

    //更新节点
    //思路:循环遍历找到当前需要修改的节点
    public DubboLinkedNode update(DubboLinkedNode node){
        DubboLinkedNode temp = headNode;
        if(headNode.nextNode==null){
            return null;
        }
        while (true){
            if(temp.nextNode==null){
                return null;
            }
            if(temp.nextNode.no==node.no){
                temp.nextNode.name=node.name;
                break;
            }
            temp = temp.nextNode;
        }
        return temp.nextNode;
    }

    //删除节点
    //思路:1、先循环遍历找到需要删除的节点
    //     2、当前删除节点前一个节点指向当前删除节点的下个节点
    //     3、当前节点的下一个节点的前一个指针指向当前删除节点的前一个节点
    public void delete(int no){
        DubboLinkedNode temp = headNode.nextNode;
        if (headNode==null){
            System.out.println("链表为空,无法删除");
        }
        while (true){
            if (temp==null){
                System.out.println("没有找到当前删除节点");
                break;
            }
            if(temp.no==no){
                temp.preNode.nextNode = temp.nextNode;
                if (temp.nextNode!=null) {
                    temp.nextNode.preNode = temp.preNode;
                }
                break;
            }
            temp = temp.nextNode;
        }
    }


    //显示链表
    public void showDubboLinked(){
        DubboLinkedNode temp = headNode.nextNode;
        if(headNode.nextNode==null){
            System.out.println("链表为空");
            return;
        }
        while (temp!=null){
            System.out.println(temp);
            temp = temp.nextNode;
        }
    }
}

class DubboLinkedNode{
    public int no;
    public String name;
    public DubboLinkedNode preNode;
    public DubboLinkedNode nextNode;

    public DubboLinkedNode(int no,String name){
        this.no = no;
        this.name = name;
    }

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值