[LeetCode]Insertion Sort List

来源:互联网 发布:巩俐白骨精知乎 编辑:程序博客网 时间:2024/05/18 02:40

Sort a linked list using insertion sort.

Analysis

The general idea is insert the current element A[i] into the proper position from A[0]...A[i-1], and A[0]...A[i-1] is already sorted.

In this problem, we can use the same idea and linked list provides a more efficient way for insertion.  Details can be found in the code below. Note that after the insertion, the position of P is unchanged but should not provide another p=p->next operation.

Complexity is O(n^2)

java

public ListNode insertionSortList(ListNode head) {        if(head == null || head.next == null) return head;        ListNode newHead = new ListNode(-1);        newHead.next = head;        ListNode cur = head;        ListNode post = head.next;        while(post!=null){        if(post.val>=cur.val){        cur = cur.next;        post = post.next;        }else {ListNode insertCur = newHead;ListNode insertPost = newHead.next;while(insertPost.val<post.val){insertCur = insertPost;insertPost = insertPost.next;}cur.next = post.next;post.next = insertPost;insertCur.next = post;post = cur.next;}        }        return newHead.next;    }

c++

ListNode *insertionSortList(ListNode *head) {        if(head == NULL) return head;        ListNode *p = new ListNode(-1);        p->next = head;        ListNode *pre = head;        ListNode *cur = pre->next;        while(cur){                        if(cur->val >= pre->val){                pre = cur;                cur = cur->next;            }else{                ListNode *insertPre = p;                ListNode *insertCur = p->next;                while(insertCur->val < cur->val){                    insertPre = insertCur;                    insertCur = insertCur->next;                }                pre->next = cur->next;                cur->next = insertCur;                insertPre->next = cur;                cur = pre->next;            }                    }        head = p->next;        return head;    }



0 0
原创粉丝点击