[LeetCode] Insertion Sort List
Well, life gets difficult pretty soon whenever the same operation on array is transferred to linked list.
First, a quick recap of insertion sort:
Start from the second element (simply a[1]
in array and the annoying head -> next -> val
in linked list), each time when we see a node with val
smaller than its previous node, we scan from the head
and find the position that the current node should be inserted. Since a node may be inserted before head
, we create a new_head
that points to head
. The insertion operation, however, is a little easier for linked list.
Now comes the code:
1 class Solution { 2 public: 3 ListNode* insertionSortList(ListNode* head) { 4 ListNode* new_head = new ListNode(0); 5 new_head -> next = head; 6 ListNode* pre = new_head; 7 ListNode* cur = head; 8 while (cur) { 9 if (cur -> next && cur -> next -> val < cur -> val) { 10 while (pre -> next && pre -> next -> val < cur -> next -> val) 11 pre = pre -> next; 12 /* Insert cur -> next after pre.*/ 13 ListNode* temp = pre -> next; 14 pre -> next = cur -> next; 15 cur -> next = cur -> next -> next; 16 pre -> next -> next = temp; 17 /* Move pre back to new_head. */ 18 pre = new_head; 19 } 20 else cur = cur -> next; 21 } 22 ListNode* res = new_head -> next; 23 delete new_head; 24 return res; 25 } 26 };
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步