public class LinkSort { /* * 链表排序 使链表保持 1、2、3、4、5 */ public static void main(String[] args) { LinkedSort<Integer> linkedSort = new LinkedSort<>(); linkedSort.addFirst(1); linkedSort.addFirst(5); linkedSort.addFirst(4); linkedSort.addFirst(9); linkedSort.addFirst(0); linkedSort.sortLink(); Node<Integer> curr = linkedSort.head; System.out.println("排序后:"); while(curr !=null) { System.out.print(","+curr.value); curr = curr.next; } LinkedSort<Integer> linkedSort2 = new LinkedSort<>(); linkedSort2.addSort(1); linkedSort2.addSort(5); linkedSort2.addSort(4); linkedSort2.addSort(9); linkedSort2.addSort(0); Node<Integer> curr2 = linkedSort2.head; System.out.println("\n添加排序:"); while(curr2 !=null) { System.out.print(","+curr2.value); curr2 = curr2.next; } }
}
class LinkedSort <T>{ Node<T> head; //基本添加 public void addFirst(T value) { Node<T> node = new Node<>(value); if(head==null) { head = node; }else { head.pre = node; node.next = head; head = node; } } //有序添加 public void addSort(T value) { Node<T> node = new Node<>(value); if(head==null) { head = node; }else { Node<T> currNode = head; while(true) { if(!compare(value,currNode.value)) {//小于当前node 停止 Node<T> preNode = currNode.pre; if(preNode == null) {//头节点 this.head = node; }else { preNode.next = node; node.pre = preNode; } node.next = currNode; currNode.pre = node; break; } Node<T> nextNode = currNode.next; if(nextNode == null) {//到尾部了 currNode.next = node; node.pre = currNode; break; } currNode = nextNode; } } } //删除node public Node<T> remove(Node<T> node){ Node<T> preNode = node.pre; Node<T> nextNode = node.next; if(preNode !=null && nextNode !=null) { preNode.next = nextNode; nextNode.pre = preNode; }else if(preNode == null && nextNode == null) {//删除是头节点 this.head = null; }else if(preNode == null) {//删除的是头节点 nextNode.pre = null; this.head = nextNode; }else if(nextNode == null) {//删除的是尾节点 preNode.next = null; } return node; } //排序 public void sortLink() { LinkedSort newLink = new LinkedSort(); //每次取出链表中最大值 放入新链表 Node<T> currHead = this.head; Node<T> maxHead = currHead; while(currHead !=null) { if(!compare(maxHead.value,currHead.value)) { maxHead = currHead; } currHead = currHead.next; if(currHead == null) {//到尾部了 remove(maxHead); newLink.addFirst(maxHead.value); currHead = this.head; maxHead = this.head; } } this.head = newLink.head; } //只考虑Integer类型 private boolean compare(T x,T y) { if(x instanceof Integer) { Integer a = (Integer) x; Integer b = (Integer) y; if(a>b) { return true; }else { return false; } } return true; } }
/* * 作为自定义链表公共类 */ public class Node<T> { T value; Node<T> pre; Node<T> next; public Node(T value){ this.value = value; } }
