先把单链表拆分成结点,并将这些结点保存到vector中,自定义排序lambda对象,对vector进行sort,最后遍历vector把排序好的结点链接起来。注意拆分链表后,每个结点的next为空。

/**
 * struct ListNode {
 *	int val;
 *	struct ListNode *next;
 * };
 */

class Solution {
public:
    /**
     * 
     * @param head ListNode类 the head node
     * @return ListNode类
     */
    ListNode* sortInList(ListNode* head) {
        vector<ListNode*> vec{};
        while(head!=nullptr){
            auto cur=head;
            head=head->next;
            cur->next=nullptr;
            vec.push_back(cur);
        }
        auto cmp=[](ListNode* node1,ListNode* node2){
            return node1->val < node2->val;
        };
        sort(vec.begin(),vec.end(),cmp);
        ListNode* dummy_head=new ListNode{INT_MIN};
        auto cur=dummy_head;
        for(int i=0;i<vec.size();i++){
            cur->next=vec[i];
            cur=cur->next;
        }
        return dummy_head->next;
    }
};