程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> Merge k Sorted Lists

Merge k Sorted Lists

編輯:C++入門知識

題目

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

方法

使用歸並排序的思想,兩兩合並,直到最終變成一個。
		    public ListNode mergeKLists(ArrayList lists) {
		        int len = lists.size();
		        if(len == 0){
		            return null;
		        }
		        int n = ( len + 1 ) / 2;
		        while(len > 1){
		            for(int i = 0; i < n ; i++){
		                if(n + i < len){
		                    if(lists.get(i) == null){
		                        lists.set(i, lists.get(n + i));
		                        lists.remove(n + i);
		                    }else if(lists.get(n + i) == null){
		                        lists.remove(n + i);
		                    }else{
		                        ListNode first = lists.get(i);
		                        ListNode second = lists.get(n + i);
		                        ListNode head = null;
		                        ListNode currentNode = null;
		                        ListNode node;
		                        while(first != null && second != null){
		                            if(first.val < second.val){
		                                node = first;
		                                first = first.next;
		                            }else{
		                                node = second;
		                                second = second.next;
		                            }
		                            if(head == null){
		                                head = node;
		                                currentNode = head;
		                            }else{
		                                currentNode.next = node;
		                                node.next = null;
		                                currentNode = node;
		                            }
		                        }
		                        if(first != null){
		                            currentNode.next = first;
		                        }else{
		                            currentNode.next = second;
		                        } 
		                        lists.set(i, head);
		                        lists.remove(n + i);                        
		                    }
		                }

		                len = lists.size();
		                n = (len + 1) / 2;
		            }
		        }
		        return lists.get(0);
		    }


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved