LeetCode 147. Insertion Sort List

题目描述:

Sort a linked list using insertion sort.

我们知道插入排序的基本思想, 和我们斗地主时候整理手牌的顺序的方法非常类似, ie, 前 i 个数组成了一个排序后的序列, 当插入第 i + 1 个数的时候, 只需要遍历这个数组找到新元素应该插入的位置, 就可以实现插入排序了。
当然, 由这个插入位置的而不同, 可以引发不同的插入排序方法的变种, 2 分插入排序, 二路插入排序等
关于更多的详细的介绍, 可以参考这篇文章
八大排序算法

下面给出我们的代码:

/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */
class Solution {
public:
    ListNode* insertionSortList(ListNode* head) {
        ListNode myhead(0);
        ListNode * pre = &myhead;
        ListNode * phead = head;

        while (phead){
            // 找到新元素插入的位置
            ListNode * pNewList = myhead.next;
            ListNode * preNewList = &myhead;
            while (pNewList){
                if (pNewList->val <= phead->val){
                    pNewList = pNewList->next;
                    preNewList = preNewList->next;
                }
                else{
                    break;
                }
            }

            // insert node
            ListNode * pInsert = phead;
            phead = phead->next;
            preNewList->next = pInsert;
            pInsert->next = pNewList;
        }

        return myhead.next;
    }
};

你可能感兴趣的:(LeetCode)