美文网首页
链表排序问题

链表排序问题

作者: juexin | 来源:发表于2017-04-12 17:05 被阅读0次

148. Sort List(链表归并排序)
Sort a linked list in O(n log n) time using constant space complexity.

class Solution {
public:
    ListNode *sortList(ListNode *head) {
        if(head==NULL||head->next==NULL)
          return head;
        ListNode* slow = head;
        ListNode* fast = head;
        while(fast->next!=NULL&&fast->next->next!=NULL)
        {
            slow = slow->next;
            fast = fast->next->next;
        }
        ListNode* list = slow->next;
        slow->next = NULL;
        head = sortList(head);
        list = sortList(list);
        return merge(head,list);    
    }
    ListNode *merge(ListNode* list1,ListNode* list2)
    {
        if(list1==NULL)
          return list2;
        if(list2==NULL)
          return list1;
        ListNode* newhead = new ListNode(-1);
        ListNode* last = newhead;
        while(list1&&list2)
        {
            if(list1->val < list2->val)
            {
                last->next = list1;
                list1 = list1->next;
            }
            else
            {
                last->next = list2;
                list2 = list2->next;
            }
            last = last->next;
        }
        if(list1==NULL)
           last->next = list2;
        else if(list2==NULL)
           last->next = list1;
        return newhead->next;
    }
};

147.Insertion Sort List(链表插入排序)
Sort a linked list using insertion sort.

class Solution {
public:
    ListNode* insertionSortList(ListNode* head) {
        ListNode* sortedhead = new ListNode(-1);
        while(head!=NULL)
        {
            ListNode* temp = head->next;
            ListNode* cur = sortedhead;
            while(cur->next!=NULL&&cur->next->val<head->val)
            {
                cur = cur->next;
            }
            head->next = cur->next;
            cur->next = head;
            head = temp;
        }
        return sortedhead->next;
    }
};

相关文章

  • Swift - LeetCode - 合并K个排序链表

    题目 合并K个排序链表 问题: 合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。 解题思路:...

  • 44_递归的思想与应用(中)

    关键词:单链表的转置、单向排序链表的合并、汉诺塔问题、全排列问题 0. 单链表的转置 1. 单向排序链表的合并 2...

  • 1.数据结构-链表问题

    链表相关问题 删除节点 链表去重 有环链表 反转链表 链表排序 链表相交 其他问题 面试题 02.03. 删除中间...

  • 链表排序问题

    148. Sort List(链表归并排序)Sort a linked list in O(n log n) ti...

  • 一刷到底。。

    归并快排堆排序模拟堆01背包完全背包问题多重背包问题多重背包问题2链表排序多链表合并字符串哈希字典树单调栈单调队列...

  • leecode刷题(27)-- 合并k个排序链表

    leecode刷题(27)-- 合并k个排序链表 合并k个排序链表 合并 k 个排序链表,返回合并后的排序链表。请...

  • LintCode 练习记录

    线性结构 2017.12.13 翻转链表 通过 链表结点计数 通过 合并两个排序链表 通过 基本了解 段错误问题,...

  • 2018-12-26

    问题列表 合并两个有序链表 合并K个排序链表 合并区间 插入区间 问题与反馈 总结与收获 多个有序链表的合并,类似...

  • 机试常用算法和题型-链表专题

    链表增删改查 链表选择排序法+找到新节点排序位置再插入 单循环链表+合并 链表查找和交换 链表如何删除最大值,排序...

  • 常见简单算法

    1.数组 二分查找: 冒泡排序 插入排序 选择排序 快速排序 链表 链表反转 合并2个有序链表 树 前序遍历

网友评论

      本文标题:链表排序问题

      本文链接:https://www.haomeiwen.com/subject/sdxvittx.html