ebay笔试题 -将两个已排好序的List做merge 返回一个新的顺序的List

本文介绍了一个Java实现的算法,该算法用于合并两个已排序的List,并返回一个新的有序List。通过迭代和比较元素来确保合并后的List保持排序状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在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掌握的不好,呵呵,所以不知道有没有什么简单的方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值