完整代码实例-Java实现 双链表按顺序添加结点

完整代码如下:

package DataStrcture.ArrayDemo.doublelinkedlistdemo;

public class AddByOrderDList {
    //结点类
    static class Node{
        Node next;
        Node pre;
        int num;
        ///构造器和toString方法
        public Node(int num){
            this.num = num;
        }
        public String toString(){
            return "num= "+num;
        }
    }
    /// 头结点
    Node head =new Node(0);

    ///结点的顺序插入
    /*
    结点顺序插入的三种情况:
    1. temp.next.num == node.num 如果不允许重复结点,则不插入链表中
    2. temp.next.num > node.num 找到了! 插入到temp的后面即可(注意有无next的区别噢)
    3. temp.next.num < node.num 还没找到, 继续找吧
     */

    public void addByOrder(Node node){
        //临时变量
        Node temp = head;
        boolean flag =false; //是否插入结点的标志
        while(true){
            if(temp.next == null){
                flag =true;
                break;
            }

            if(temp.next.num == node.num)
                break;
            if(temp.next.num > node.num){
                flag = true;
                break;
            }

                temp =temp.next;
        }

        if(flag){
            node.next = temp.next;
            node.pre = temp;
            temp.next = node;
            if(node.next != null)
                如果node节点添加到链表的尾部, 那么此句必然node.next必然导致空指针异常.
                //所以我们对node.next 加上判断
                node.next.pre = node;
        }
    }
    ///4.双链表的打印
    public void list() {
        //临时变量
        Node temp = head;

        while (true) {
            if (temp.next == null)
                break;
            temp = temp.next;
            System.out.println(temp);
        }
    }

    public static void main(String[] args) {
        AddByOrderDList dl = new AddByOrderDList();

        Node node_1 = new Node(6);
        Node node_2 = new Node(1);
        Node node_3 = new Node(7);
        Node node_4 = new Node(2);
        Node node_5 = new Node(9);
        Node node_6 = new Node(5);
        Node node_7 = new Node(12);
        Node node_9 = new Node(79);
        Node node_10 = new Node(80);

        dl.addByOrder(node_1);
        dl.addByOrder(node_2);
        dl.addByOrder(node_3);
        dl.addByOrder(node_4);
        dl.addByOrder(node_5);
        dl.addByOrder(node_6);
        dl.addByOrder(node_7);
        dl.addByOrder(node_9);
        dl.addByOrder(node_10);

        dl.list();

    }
}

运行结果:

在这里插入图片描述

posted @ 2022-05-26 20:31  青松城  阅读(59)  评论(0编辑  收藏  举报