链表的插入排序

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;
    }
};
刷遍天下无敌手 文章被收录于专栏

秋招刷题历程

全部评论

相关推荐

不愿透露姓名的神秘牛友
06-27 20:55
点赞 评论 收藏
分享
05-19 19:57
蚌埠学院 Python
2237:Gpa70不算高,建议只写排名,个人技能不在多而在精,缩到8条以内。项目留一个含金量高的,减少间距弄到一页,硕士简历也就一页,本科不要写很多
实习,投递多份简历没人回...
点赞 评论 收藏
分享
06-04 09:27
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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