ebay筆試題 -將兩個已排好序的List做merge 返回一個新的順序的List

在ebay做的一個筆試題,不能夠用已有的排序函數

將兩個已排好序的List做merge 返回一個新的順序的List

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.ListIterator;

public class ListMerge {

    
public static List ListMerge(List first, List second) {
        ListIterator iteratorFirst 
= first.listIterator();
        ListIterator iteratorSecond 
= second.listIterator();

        
int firstPosition = 0;
        Object next;
        
boolean endOfFirst = false;
        
while (iteratorSecond.hasNext()) {
            next 
= iteratorSecond.next();
            
boolean existed = first.contains(next);
            
if (existed) {
                
continue;
            }

            
while (((Comparable) first.get(firstPosition)).compareTo(next) < 0){
                firstPosition 
+= 1;
                
if (firstPosition < first.size() - 1{
                    
continue;
                }
 else {
                    endOfFirst 
= true;
                    
break;
                }

            }

            
if (!endOfFirst) {
                first.add(firstPosition, next);
            }
 else {
                
while (iteratorSecond.hasNext()) {
                    next 
= iteratorSecond.next();
                    first.add(next);
                }

                
break;           
            }

        }

           
        
return first;
    }


    
public static void main(String[] args) {
        List first 
= new ArrayList();
        
for (int i = 0; i < 10; i++{
            first.add(
new Integer(i * 2));
        }

        List second 
= new ArrayList();
        
for (int i = 0; i < 10; i++{
            second.add(
new Integer(i * 2 + 1));
        }


        ListIterator iteratorFirst 
= first.listIterator();
        ListIterator iteratorSecond 
= second.listIterator();

        
while (iteratorFirst.hasNext()) {
            System.out.print(iteratorFirst.next() 
+ "  ");
        }

        System.out.println();

        
while (iteratorSecond.hasNext()) {
            System.out.print(iteratorSecond.next() 
+ "  ");
        }

        System.out.println();

        List result 
= ListMerge.ListMerge(first, second);
        ListIterator iteratorResult 
= result.listIterator();

        
while (iteratorResult.hasNext()) {
            System.out.print(iteratorResult.next() 
+ "  ");
        }

        System.out.println();
    }

}

結果 :
0  2  4  6  8  10  12  14  16  18
1  3  5  7  9  11  13  15  17  19
0  1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  18  19

現在的缺點是改變了傳入的first對象的內容...

大概實現了這個題目的要求
不過DS掌握的不好,呵呵,所以不知道有沒有什麼簡單的方法
發佈了34 篇原創文章 · 獲贊 0 · 訪問量 29萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章