一、对链表进行插入排序
栗子:
Input: head = [-1,5,3,4,0] Output: [-1,0,3,4,5]
限制:
The number of nodes in the list is in the range [1, 5000].
-5000 <= Node.val <= 5000
二、思路
如果要遍历然后通过遍历每个链表节点,指针一个个改指向,比较麻烦,需要三个指针,节点数看起来不是很多,偷懒直接用STL进行排序然后再连在一起。前者方法后面补~
三、C++代码
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListNode(int x, ListNode *next) : val(x), next(next) {} * }; */ class Solution { public: ListNode* insertionSortList(ListNode* head) { vector<ListNode*>vec; while(head){ vec.push_back(head); head = head->next; } sort(vec.begin(), vec.end(), [&](ListNode* n1, ListNode* n2){ return n1->val < n2->val; }); for(int i = 0;i < vec.size(); i++){ if(i == vec.size()-1){ vec[i]->next = NULL; }else{ vec[i]->next = vec[i+1]; } } return vec.front(); } };