插入法 排列 linked list

来源:互联网 发布:淘宝怎么看买家秀 编辑:程序博客网 时间:2024/06/08 02:23
package com.amaker.lalala;// write a class sort a linked list using insertion sort algorithm//解析 插入法 指针p 始终指向第一个未排好序的节点,在排好序的部分中找第一个比他大的q节点 然后通过节点的next 来重新排序linked list;//感觉 对linkedList 排序的算法 中此算法最容易理解 网上一堆该题算法 ,繁琐 难以理解。 class ListNode {      int val;      ListNode next;      ListNode(int x) {          val = x;          next = null;      }  }  public class SortLinkedList {      public static ListNode insertionSortList(ListNode head) {          ListNode root = new ListNode(0);        root.next = head;        ListNode q;        ListNode r;        ListNode p = head;        while(p != null && p.next != null ){            if(p.val <= p.next.val ){                p=p.next;            }else{                q = p.next;                p.next = q.next;                r = root;                while(r.next.val <= q.val){                    r = r.next;                 }                q.next = r.next;                r.next = q;            }        }        return root.next;    }      public static void main(String[] args) {          ListNode n1 = new ListNode(1);          ListNode n2 = new ListNode(2);          ListNode n3 = new ListNode(4);          ListNode n4 = new ListNode(7);          ListNode n5 = new ListNode(5);          ListNode n6 = new ListNode(90);          n1.next = n2;          n2.next = n3;          n3.next = n4;          n4.next = n5;          n5.next = n6;          n1 = insertionSortList(n1);          printList(n1);      }      public static void printList(ListNode x) {          if(x != null){              System.out.print(x.val + " ");              while (x.next != null) {                  System.out.print(x.next.val + " ");                  x = x.next;              }              System.out.println();          }      }  }  
原创粉丝点击