数据与算法课后习题

题目:给定两个已经排序的表L1和L2,只使用基本的表的操作编写计算L1∪L2的过程

思路:可以从L1∩L2中受到启发,不同的是,都要加进去,但是,是去除重复么?

答案是比较巧妙的,和求交集是基本一致的,通过比较两个数的大小,如果相等就直接加入数组中,不然就一直输出小的那一组,并把小的元素,加入到最后的result中

3.5public static <AnyType extends Comparable<? super AnyType>> void union(List<AnyType> L1, List<AnyType> L2,
List<AnyType> Result)
{

ListIterator<AnyType> iterL1 = L1.listIterator(); ListIterator<AnyType> iterL2 = L2.listIterator();

AnyType itemL1=null, itemL2=null;

// get first item in each list
if ( iterL1.hasNext() && iterL2.hasNext() )
{
itemL1 = iterL1.next(); itemL2 = iterL2.next();
}

while ( itemL1 != null && itemL2 != null )
{
int compareResult = itemL1.compareTo(itemL2);

if ( compareResult == 0 )
{
Result.add(itemL1);
itemL1 = iterL1.hasNext()?iterL1.next():null; itemL2 = iterL2.hasNext()?iterL2.next():null;
}
else if ( compareResult < 0 )
{
Result.add(itemL1);
itemL1 = iterL1.hasNext()?iterL1.next():null;
}
else
{
Result.add(itemL2);
itemL2 = iterL2.hasNext()?iterL2.next():null;
}
}
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值