1. 程式人生 > >LeetCode-------merge-k-sorted-lists

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

spa sorted gpo 題目 next sin 應該 java 復雜

題目:

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