LeetCode.147 Insertion Sort List

来源:互联网 发布:网络数据保险箱 编辑:程序博客网 时间:2024/06/05 16:54

题目:

Sort a linked list using insertion sort.

分析:

/** * Definition for singly-linked list. * public class ListNode { *     int val; *     ListNode next; *     ListNode(int x) { val = x; } * } */class Solution {    public ListNode insertionSortList(ListNode head) {        //链表的插入排序        //每次将列表中的最小插前面(已经有序)        if(head==null||head.next==null)return head;                //链表对折,分两部分        //tail用于表示后半部分,start用于记数,temp临时存储(类似pre)        ListNode tail=head,start=head,temp=null;        while(start!=null&&start.next!=null){            temp=tail;            tail=tail.next;            start=start.next.next;//比tail快一倍速度,正好将链表对折        }                //递归实现后半部分        ListNode l2=insertionSortList(tail);                //temp正好为tail的前一个,断链        temp.next=null;                //递归实现前半部分        ListNode l1=insertionSortList(head);        ListNode dummy=new ListNode(0);        ListNode cur=dummy;                //将前半部分和后半部分比较        while(l1!=null&&l2!=null){            if(l1.val<l2.val){                //插入cur                cur.next=l1;                l1=l1.next;            }else{                cur.next=l2;                l2=l2.next;            }            cur=cur.next;        }        //以防l1或l2还有节点        if(l1!=null) cur.next=l1;        if(l2!=null) cur.next=l2;             return dummy.next;            }}


原创粉丝点击