题目:
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.