题解 | 单链表的排序

单链表的排序

https://www.nowcoder.com/practice/f23604257af94d939848729b1a5cda08

/**
 * struct ListNode {
 *	int val;
 *	struct ListNode *next;
 *	ListNode(int x) : val(x), next(nullptr) {}
 * };
 */
class Solution {   
    //采用归并排序,拆分到最小,再合并
    //如果采用快速排序,节点的移动(删除再添加)很麻烦,且
    //总是需要被移动节点的前面一个节点,逻辑复杂
public:
    ListNode* sortInList(ListNode* head) {
        if(!head || !head->next) return head;   //当只有一个时,返回开始合并

        ListNode *slow = head, *fast = head;  
        while(fast->next && fast->next->next){
            slow = slow->next;
            fast = fast->next->next;
        }

        ListNode *mid = slow->next;
        slow->next = nullptr;   //断开连接,合并的时候需要检查空;
        ListNode *left = sortInList(head);
        ListNode *right = sortInList(mid);

        return merge(left, right);  //合并
    }

    ListNode* merge(ListNode *l1, ListNode *l2){
        ListNode dummy(0);
        ListNode *tail = &dummy;

        while(l1 && l2){    
            if(l1->val < l2->val){  //连接,移动指针即可
                tail->next = l1;
                l1 = l1->next;
                tail = tail->next;
            }else{
                tail->next = l2;
                l2 = l2->next;
                tail = tail->next;
            }
        }

        tail->next = l1? l1:l2;
        return dummy.next;
    }
};





全部评论

相关推荐

找工作勤劳小蜜蜂:自我描述部分太差,完全看不出想从事什么行业什么岗位,也看不出想在哪个地区发展,这样 会让HR很犹豫,从而把你简历否决掉。现在企业都很注重员工稳定性和专注性,特别对于热爱本行业的员工。 你实习的工作又太传统的it开发(老旧),这部分公司已经趋于被淘汰,新兴的互联网服务业,比如物流,电商,新传媒,游戏开发和传统的It开发有天然区别。不是说传统It开发不行,而是就业岗位太少,基本趋于饱和,很多老骨头还能坚持,不需要新血液。 工作区域(比如长三角,珠三角,成渝)等也是HR考虑的因素之一,也是要你有个坚定的决心。否则去几天,人跑了,HR会被用人单位骂死。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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