单链表的排序

单链表的排序

http://www.nowcoder.com/questionTerminal/f23604257af94d939848729b1a5cda08

解题思路

  1. 用 vector<ListNode*> 先存储链表中各个节点
  2. 使用 sort 对 vector 进行排序
  3. 将 vector 中的 ListNode 按顺序串联起来
/**
 * struct ListNode {
 *    int val;
 *    struct ListNode *next;
 * };
 */

class Solution {
public:
    ListNode* sortInList(ListNode* head) {
        vector<ListNode*> nodes;
        ListNode* pNode = head;

        while (pNode) {
            nodes.emplace_back(pNode);
            pNode = pNode->next;
        }

        auto cmp = [](ListNode* a, ListNode* b) -> bool {
            return a->val < b->val;
        };

        sort(nodes.begin(), nodes.end(), cmp);
        for (int i = 0; i < nodes.size() - 1; ++i) {
            nodes[i]->next = nodes[i + 1];
        }
        nodes[nodes.size() - 1]->next = nullptr;
        return nodes[0];
    }
};
全部评论

相关推荐

评论
13
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务