链表排序(添加排序手动排序)

it2026-08-05  7

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;      } }

最新回复(0)