数据结构之双向循坏链表java简单实现

数据结构之双向循坏链表java简单实现,java里面的基本数据结构已经很好用了,但是还是为了学习而学习,动手做一下总是踏实的。参考参考

public class doubleDirLinkList {
    public static Node[] arr;
    public static void main(String[] args) {
        Node node = initList();//初始化双向循环链表
        Node node5 = new Node();
        Node node1 = new Node();
        Node node2 = new Node();
        Node node3 = new Node();
        Node node4 = new Node();

        arr = new Node[]{node, node1, node2, node3, node4, node5};//用数组模拟物理空间,存放结点

        addElemLast(node, node1,"first");//插入节点
        addElemLast(node1,node2,"second");
        addElemLast(node2,node3,"third");
        addElemLast(node3,node5,"five");
        addElemLast(node3,node4,"four");

        delElemLast(node3);//删除节点

        showElem();//展示链表
    }

    public static Node initList(){
        Node doubleList = new Node();
        doubleList.setData("head node");
        doubleList.setPre(doubleList);
        doubleList.setNext(doubleList);
        doubleList.setHeadNode(true);
        return doubleList;
    }

    public static void addElemLast(Node node, Node node1,String nodeName){
        node1.setData(nodeName);
        node1.setNext(node.getNext());
        node1.setPre(node);
        node.getNext().setPre(node1);
        node.setNext(node1);
    }

    public static void delElemLast(Node node){
        node.getPre().setNext(node.getNext());
        node.getNext().setPre(node.getPre());
        for (int i=0; i<arr.length; i++){
            if (arr[i].getData() == node.getData()){
                arr[i]=null;
            }
        }
    }
    public static void showElem(){
        for (int i=0; i<arr.length;i++){
            if(arr[i] != null){
                arr[i].showNode();
            } else {
                System.out.println("this is a blank item");
            }
        }
    }
}

class Node <T>{
    private T data;
    private Node pre;
    private Node next;
    private boolean isHeadNode = false;

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }

    public Node getPre() {
        return pre;
    }

    public void setPre(Node pre) {
        this.pre = pre;
    }

    public Node getNext() {
        return next;
    }

    public void setNext(Node next) {
        this.next = next;
    }

    public boolean isHeadNode() {
        return isHeadNode;
    }

    public void setHeadNode(boolean headNode) {
        isHeadNode = headNode;
    }

    public void showNode() {
        if (this.isHeadNode == true){
            System.out.println("{" +
                    "data=" + data +
                    ", pre=" + pre.getData() +
                    ", next=" + next.getData() +
                    ", isHeadNode=" + isHeadNode +
                    '}');
        } else {
            System.out.println("{" +
                    "data=" + data +
                    ", pre=" + pre.getData() +
                    ", next=" + next.getData() +
                    '}');
        }
    }
}

输出示例:

发布了41 篇原创文章 · 获赞 17 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/Mr_carry/article/details/105223245