【Leetcode】Merge k Sorted Lists

原创 2013年12月05日 21:25:11

Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.

题意:将k个排序链表合并为一个新的排序链表。

要注意的地方:

1)memset的用法,这里花了我很长时间,关键在于char buffer1[20]和char *buffer2=new int[k],k=20是不一样的,因为buffer1是数组,sizeof(buffer1)=20,而buffer2是一个指针,sizeof(buffer2)=4。

void *memset(void *s, char ch, size_t n);的解释是将s中前n个字节 (typedef unsigned int size_t)用 ch 替换并返回 s 。故这里第三个参数可以用sizeof(buffer1),但不能用sizeof(buffer2),而是要sizeof(char)*k。

2)每次取得每个链表的头结点,比较最小值,然后将最小值所在的链表向后移动一个结点。(其实这里也可以不比较结点的值,而是通过让min=-1,-1指的是lists的下标,如果遍历一边lists后,min仍为-1,表明已经合并完成。不然的话选取lists[min]->val即为最小值。

3)直到所有的链表都遍历一遍后,这个合并完成。

class Solution {
public:
    ListNode *mergeKLists(vector<ListNode *> &lists) {
        unsigned int k=lists.size();
        if(k==0)
            return NULL;
        if(k==1)
            return lists[0];
        ListNode *head=NULL,*p=NULL;
        int *a=new int[k];
        memset(a,0,k);
        int pos;
        bool *NotNULL=new bool[k];  //判断是否k个链表都为空
        memset(NotNULL,true,k);
        int flag=0;
        while(true)
        {
            flag=0;
            for(unsigned int i=0;i<k;i++)
            {
                if(lists[i])
                    a[i]=lists[i]->val;
                else
                {
                    NotNULL[i]=false;
                    flag++;
                }
            }
            if(flag==k)
                break;
            int min=minimum(a,NotNULL,k,pos);
            lists[pos]=lists[pos]->next;
            if(head==NULL)
            {
                head=new ListNode(min);
                p=head;
            }
            else
            {
                ListNode *node=new ListNode(min);
                p->next=node;
                p=p->next;
            }
            
        }
        return head;
    }
    
    int minimum(int a[],bool notNULL[],unsigned int k,int &pos)
    {
        int min=~(1<<31);
        for(unsigned int i=0;i<k;i++)
        {
            if(notNULL[i])
            {
                if(a[i]<min)
                {
                    min=a[i];
                    pos=i;
                }
            }
        }
        return min;
    }
};


LeetCode23 Merge k Sorted Lists 把K个有序链表连接成一个

题目: Merge k sorted linked lists and return it as one sorted list. Analyze and describe its comple...
  • vvaaiinn
  • vvaaiinn
  • 2015年05月06日 11:17
  • 2342

leetCode 23. Merge k Sorted Lists (合并k个排序链表) 解题思路和方法

Merge k Sorted Lists  Merge k sorted linked lists and return it as one sorted list. Analyze and des...
  • xygy8860
  • xygy8860
  • 2015年07月06日 23:17
  • 492

LeetCode OJ 之 Merge Two Sorted Lists(合并两个有序的链表)

题目: Merge two sorted linked lists and return it as a new list. The new list should be made by splici...
  • u012243115
  • u012243115
  • 2014年11月06日 22:27
  • 438

每日算法之二十一:Merge k Sorted Lists

Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity....
  • yapian8
  • yapian8
  • 2014年05月28日 11:36
  • 502

算法题——Merge k Sorted Lists(JAVA)合并链表

合并若干个有序列表
  • ivyusing
  • ivyusing
  • 2017年05月06日 12:08
  • 157

23. Merge k Sorted Lists等题 第二周解题报告

原题Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity....
  • Mr_Zing
  • Mr_Zing
  • 2016年09月11日 23:47
  • 588

算法设计与分析(16)-- Merge k Sorted Lists(难度:hard)

Merge k Sorted Lists
  • alexlau8
  • alexlau8
  • 2017年06月22日 11:24
  • 237

一次使用 Redis 优化查询性能的实践

一次使用 Redis 优化查询性能的实践 应用背景 有一个应用需要上传一组ID到服务器来查询这些ID所对应的数据,数据库中存储的数据量是7千万,每次上传的ID数量一般都是几百至上千...
  • u010802573
  • u010802573
  • 2015年12月26日 17:36
  • 369

Python实现LeetCode链表类算法(例子:Merge k Sorted Lists)

链表的算法关键点:新创建一个头结点,并且将这个节点赋值给另外的链表对象来完成操作。例如19. Remove Nth Node From End of List class Solution(objec...
  • u010698087
  • u010698087
  • 2017年07月05日 16:32
  • 132

【LeetCode-面试算法经典-Java实现】【160-Intersection of Two Linked Lists(单链表的交集)】

【160-Intersection of Two Linked Lists(单链表的交集)】【LeetCode-面试算法经典-Java实现】【所有题目目录索引】原题  Write a program ...
  • DERRANTCM
  • DERRANTCM
  • 2015年08月22日 06:45
  • 3221
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【Leetcode】Merge k Sorted Lists
举报原因:
原因补充:

(最多只允许输入30个字)