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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode-------merge-k-sorted-lists相关的知识,希望对你有一定的参考价值。

题目:

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)(我不知道对不对啊,我对这个时间复杂度方面不太感冒)。有问题联系我,邮箱:[email protected] qq:764666877.

以上是关于LeetCode-------merge-k-sorted-lists的主要内容,如果未能解决你的问题,请参考以下文章