求两个顺序链表的交集,假设链表是递增的。
public static LinkedList<Integer> listIntersection(LinkedList<Integer> L1, LinkedList<Integer> L2){
LinkedList<Integer> intersection = new LinkedList<>();
Iterator<Integer> iter1 = L1.iterator();
Iterator<Integer> iter2 = L2.iterator();
int a = iter1.next();
int b = iter2.next();
while(true){
if(a == b){
intersection.add(a);
if(iter1.hasNext() && iter2.hasNext()){
a = iter1.next();
b = iter2.next();
}
else break;
}
else if (a > b) {
if(iter2.hasNext())
b = iter2.next();
else break;
}
else {
if(iter1.hasNext())
a = iter1.next();
else break;
}
}
return intersection;
}
求两个顺序链表的并集,假设链表是递增的。
public static LinkedList<Integer> listUnion(LinkedList<Integer> L1, LinkedList<Integer> L2){
LinkedList<Integer> union = new LinkedList<>();
Iterator<Integer> iter1 = L1.iterator();
Iterator<Integer> iter2 = L2.iterator();
int a = iter1.next();
int b = iter2.next();
while(true){
if(a == b){
union.add(a);
if(iter1.hasNext() && iter2.hasNext()){
a = iter1.next();
b = iter2.next();
}else break;
}
else if (a > b) {
union.add(b);
if(iter2.hasNext())
b = iter2.next();
else break;
}
else {
union.add(a);
if(iter1.hasNext())
a = iter1.next();
else break;
}
}
while(iter1.hasNext()) union.add(iter1.next());
while(iter2.hasNext()) union.add(iter2.next());
return union;
}