题解 | #万万没想到之聪明的编辑#

单链表的排序

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

利用快排思想,把头节点作为标记,采取值交换的方式将比标记小或大的分别放在两边

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

class Solution {
public:
    /**
     * 
     * @param head ListNode类 the head node
     * @return ListNode类
     */
    ListNode* Get_Partion(ListNode* B, ListNode* E){
        if(B==nullptr||B->next==E) return B;
        int key=B->val;
        ListNode *p=B,*q=p->next;
        while(q!=E){
            if(q->val<key){
                p=p->next;
                swap(p->val,q->val);
            }
            q=q->next;
        }
        swap(p->val,B->val);
        return p;
    }
    void QuickSort(ListNode* B, ListNode* E){
        if(B==E) return;
        ListNode *P = Get_Partion(B, E);
        QuickSort(B, P);
        QuickSort(P->next, E);
    }

    ListNode* sortInList(ListNode* head) {
        QuickSort(head,nullptr);
        return head;
    }

};
全部评论

相关推荐

有趣的牛油果开挂了:最近这个阶段收到些杂七杂八的短信是真的烦
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务