147. Insertion Sort List(JAVA链表的插入排序)

思路

  1. 先判断边界输入。
  2. 拆出一个链表元素,head指针移动,直到head为空。
  3. 拿拆出的元素与新建的排好序的链表比较,看插在哪里。有三种方式,插在开头,插在中间,插在末尾。插入后把指针指到此链表开头,跳出循环。
class Solution {
    public ListNode insertionSortList(ListNode head) {
        if(head==null||head.next==null)
            return head;
        ListNode p1 = new ListNode(-999);
        ListNode p2 = p1;
        ListNode p3 = p1;
        while(head!=null){
            ListNode tmp = new ListNode(head.val);
            head = head.next;
            if(p1.next==null){
                p1.next = tmp;
                continue;
           } 
            while(p1.next!=null){
                if(tmp.val<p1.next.val){
                    ListNode tmp1 = p1.next;
                    p1.next = tmp;
                    tmp.next = tmp1;
                    p1 = p2;
                    break;
                }
                else
                    p1 = p1.next;
            }
            if(p1.next==null){
            p1.next = tmp;
            p1 = p2;
            }
        }
        return p3.next;     
}
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容