Insertion Sort List

来源:互联网 发布:知聊色情聊天 编辑:程序博客网 时间:2024/06/07 22:26

Sort a linked list using insertion sort.

用插入排序给链表排序。

假设1~k个节点已经从小到大排好序。那么我们就排第k+1个节点。将其放到第一个大于他的节点的前面,以此类推

/** * 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) {    if( head == NULL || head->next == NULL )        return head;    ListNode *left,*preleft, *preright, *right;    left = preright = head;    preleft = NULL;    right = head->next;    while( right != NULL)    {           while( left != right && left->val <= right->val )        {               preleft = left;            left = left->next;        }           if ( left == right )        {               preright = right;            right = right->next;            left = head;            preleft = NULL;            continue;        }        else        {            preright->next = right->next;            right->next = left;            if( preleft != NULL )                preleft->next = right;            else                head = right;            right = preright->next;            left = head;            preleft = NULL;        }    }    return head;}};


0 0