链表的插入排序

insertion-sort-list

http://www.nowcoder.com/questionTerminal/152bc6c5b14149e49bf5d8c46f53152b

由于单向链表只能单方向遍历,因此不能像数组的插入排序那样。

在这里使用递归实现,其有一个断链合链的过程,这是代码的关键所在。

class Solution {
public:
    /**
     *
     * @param head ListNode类
     * @return ListNode类
     */
    ListNode* insertionSortList(ListNode* head) {
        // write code here
        if (!head || !head->next) return head;
        ListNode dummyHead(0), *p;
        dummyHead.next = insertionSortList(head->next);
        p = &dummyHead;
        // 插入排序: 关键在于寻找插入位置
        while (p && p->next && p->next->val < head->val) { p = p->next; }
        head->next = p->next;
        p->next = head;
        return dummyHead.next;
    }
};
刷遍天下无敌手 文章被收录于专栏

秋招刷题历程

全部评论

相关推荐

牛客410815733号:这是什么电影查看图片
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务