题目链接: Insertion Sort List
题目意思: 利用插入排序,对链表排序
代码:
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: void sort (vector<ListNode*> &arrList, int size); ListNode *insertionSortList(ListNode *head); }; void Solution::sort (vector<ListNode*> &arrList, int size) { for (int i = 1; i < size; i++) { int j = i-1; int tmp = arrList[i]->val; for (j = i-1; j >= 0; j--) { if (tmp >= arrList[j]->val) { break; } arrList[j+1]->val = arrList[j]->val; } if (j < (i-1)) { arrList[j+1]->val = tmp; } } } ListNode* Solution::insertionSortList(ListNode *head) { if (NULL == head) { return NULL; } int size = 0; ListNode *tmpHead = head; while (tmpHead != NULL) { size++; tmpHead = tmpHead->next; } vector<ListNode*> arrList; tmpHead = head; while (tmpHead != NULL) { arrList.push_back(tmpHead); tmpHead = tmpHead->next; } sort(arrList, size); return head; }