代码如下:
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();
}
}
输出结果: