# 147. Insertion Sort List Difficulty: Easy ## Solution ```cpp= /** *** Author: R-CO *** E-mail: daniel1820kobe@gmail.com *** Date: 2020-10-13 **/ #include <cstdio> #include <cstdlib> 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) { if (head == nullptr) { return nullptr; } ListNode pre_node; while (head != nullptr) { auto *current = head; head = head->next; insertToCorrectPosition(&pre_node, current); } ListNode *sorted_list = pre_node.next; return sorted_list; } private: void insertToCorrectPosition(ListNode *pre_node, ListNode *current) { while (pre_node != nullptr) { if (pre_node->next == nullptr) { pre_node->next = current; current->next = nullptr; break; } if (pre_node->next->val >= current->val) { auto *temp = pre_node->next; pre_node->next = current; current->next = temp; break; } pre_node = pre_node->next; } } }; int main(int argc, char *argv[]) { ListNode *head = new ListNode(4, new ListNode(2, new ListNode(1, new ListNode(3)))); Solution solution; head = solution.insertionSortList(head); auto *node = head; while (node != nullptr) { printf("%d,", node->val); auto *temp = node; node = node->next; delete temp; } printf("\n"); return EXIT_SUCCESS; } ``` ## Result Success Details Runtime: 52 ms, faster than 48.99% of C++ online submissions for Insertion Sort List. Memory Usage: 9.7 MB, less than 64.86% of C++ online submissions for Insertion Sort List. ###### tags: `LeetCode-Easy` `C++`