码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode-------merge-k-sorted-lists

时间:2017-12-11 21:11:05      阅读:141      评论:0      收藏:0      [点我收藏+]

标签:nbsp   code   ret   and   复杂   我不知道   return   turn   不难   

题目:

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

题意:合并k个有序链表,分析和描述它的时间复杂度。

代码过来:

 1 /**
 2  * Definition for singly-linked list.
 3  * public class ListNode {
 4  *     int val;
 5  *     ListNode next;
 6  *     ListNode(int x) {
 7  *         val = x;
 8  *         next = null;
 9  *     }
10  * }
11  */
12 import java.util.*;
13 public class Solution
14 {
15     public ListNode merge(ListNode p1,ListNode p2)
16     {
17     /*
18     下面就是对两个链表的归并操作,时间复杂度为:(logn),下面的两个if判断语句
19     我相信大家应该能理解吧
20     */
21            if(p1 == null)
22         {
23             return p2;
24         }
25         if(p2 == null)
26         {
27             return p1;
28         }
29     /*
30     如下就是两个链表的归并操作。
31     */
32         ListNode p_1 = p1;
33         ListNode p_2 = p2;
34         ListNode pTemp = null;
35         ListNode pHead = new ListNode(0);
36         if(p_1.val >= p_2.val)
37         {
38             pTemp = p_2;
39             p_2 = p_2.next;
40         }else
41         {
42             pTemp = p_1;
43             p_1 = p_1.next;
44         }
45         pHead.next = pTemp;
46         while(p_1 != null && p_2 != null)
47         {
48             if(p_1.val >= p_2.val)
49             {
50                    pTemp.next = p_2;
51                 pTemp = p_2;
52                 p_2 = p_2.next;
53             }else
54             {
55                    pTemp.next = p_1;
56                 pTemp = p_1;
57                 p_1 = p_1.next;
58             }
59         }
60         if(p_1 != null)
61         {
62             pTemp.next = p_1;
63         }
64         if(p_2 != null)
65         {
66             pTemp.next = p_2;
67         }
68         return pHead.next;
69     }
70     public ListNode mergeKLists(ArrayList<ListNode> lists)
71     {
72         /*
73     如果lists里面没有内容那么返回肯定为空
74     */
75     if(lists.size() == 0)
76         {
77             return null;
78         }
79     /*
80     如果lists里面仅仅有一个链表,那么返回的就是这个链表本身。
81     */
82         if(lists.size() ==1)
83         {
84             return lists.get(0);
85         }
86         ListNode temp = null;
87         /*
88     下面就是对lists里面的内容进行归并
89     */
90         for(int i = 0;i<lists.size();i++)
91         {
92             temp = merge(temp,lists.get(i));
93         }
94         return temp;
95     }
96 }

上面就是我对这道题的解析,其实不难,问题中的核心点就是链表之间的归并操作,时间复杂度为O(klogn)(我不知道对不对啊,我对这个时间复杂度方面不太感冒)。有问题联系我,邮箱:cmhhw_xju@163.com qq:764666877.

LeetCode-------merge-k-sorted-lists

标签:nbsp   code   ret   and   复杂   我不知道   return   turn   不难   

原文地址:http://www.cnblogs.com/cmh-hw/p/8024926.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!