Solution in C
Code\n\n/**\n * Definition for singly-linked list.\n * struct ListNode {\n *     int val;\n *     struct ListNode *next;\n * };\n */\nstruct ListNode* insertion
# Code\n```\n/**\n * Definition for singly-linked list.\n * struct ListNode {\n *     int val;\n *     struct ListNode *next;\n * };\n */\nstruct ListNode* insertionSortList(struct ListNode* head) {\n    if (!head || !head->next) {\n        return head;\n    }\n\n    struct ListNode* dummy = malloc(sizeof(struct ListNode));\n    dummy->next = head;\n\n    struct ListNode* prev = head;\n    struct ListNode* cur = head->next;\n\n    while (cur) {\n        // already in-order\n        if (prev->val <= cur->val) {\n            prev = cur;\n            cur = cur->next;\n        } else {\n            struct ListNode* temp = dummy;\n            \n            while(cur->val > temp->next->val) \n                temp = temp->next;\n\n            // find the stop\n            prev->next = cur->next;\n            cur->next = temp->next;\n            temp->next = cur;\n\n            cur = prev->next;\n        }\n    }\n    return dummy->next;\n}\n```
['C']