完整代码示例-Java实现单链表有序插入

代码如下:

package DataStrcture.ArrayDemo.singlelistdemo;

public class OrderSingleListDemo {
    public static class Node{
        Node next;
        String name;
        int age;
        //个构造器用于初始化
        public Node(String name, int age){
                    this.name = name;
                    this.age=age;
        }
        ///tostring()方法输出
        public String toString(){
            return "name: "+name+", age: "+age;
        }

    }
        //头结点
        Node head = new Node("",0);

         对加入的链表结点进行排序, 保持整体有序
        public void addByOrder(Node node){
            //临时变量
            Node temp = head;
            boolean flag = false;// 标识是否可以插入结点
            /*
                对插入的结点进行排序的几种情况:
                    1. 新插入的结点的大小正好处于最后;(temp.next==null)
                    2. 找到了第一个比新节点的大的结点(temp.next.id > node.id),立马跳出循环查到他的前面;
                    3. 找到的结点的值跟新结点的一样,如果不允许重复,此方法在这里就应该跳出并结束了

             */
            while(true){
                //情况一
                if(temp.next == null){
                    flag = true;
                    break;
                }
                //情况2
                if(temp.next.age > node.age){
                    flag = true;
                    break;
                }
                ///情况三
                if(temp.next.age == node.age)
                    break;
                //三种情况都没有(即都小于这个新节点的值),那就继续遍历呗
                temp = temp.next;
            }

            if(flag){
                node.next = temp.next;
                temp.next = node;
            }else{
                System.out.println("已经有重复结点存在了, 无法加入结点: "+node);
            }
        }

        ///对列表进行打印输出
    public void list(){
            ///临时变量
        Node temp = head;

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

    public static void main(String[] args) {
            ///新建结点
        Node node_1 = new Node("小猪",14);
        Node node_2 = new Node("小狗",10);
        Node node_3 = new Node("小猫",8);
        Node node_4 = new Node("小兔纸",8);
        Node node_5 = new Node("小牛",16);
        Node node_6 = new Node("小沙比",28);
        Node node_7 = new Node("小羊",2);

        //新建链表
        OrderSingleListDemo sl = new OrderSingleListDemo();

        //加入链表
        sl.addByOrder(node_1);
        sl.addByOrder(node_2);
        sl.addByOrder(node_3);
        sl.addByOrder(node_4);
        sl.addByOrder(node_5);
        sl.addByOrder(node_6);
        sl.addByOrder(node_7);

        ///打印输出
        sl.list();
    }
}

输出结果:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值