算法还是比较简单的,由于链表已经排序,所以可以把复杂度控制在Θ(n1+n2)(n1\n2分别是链表L1\L2的长度)。
比如算交集,如果L1.front()小于L2.front(),就L1.pop_front();如果L1.front()大于L2.front(),就开始在L2中循环,直到找到第一个大于或者等于L1.front()的元素,其中如果相等,则把这个数放入结果集中。说得不是很清楚,直接上代码。
#include <list>
#include "stdlib.h"
using namespace std;
void showList(list<int> t){
while (!t.empty()){
printf("%d ", t.front());
t.pop_front();
}
printf("\n");
}
int main(){
int a[8] = {0, 2, 3, 5, 6, 7, 9, 12};
int b[8] = {1, 2, 4, 5, 7, 8, 9, 13};
list<int> lt1(a, a+8);
list<int> lt2(b, b+8);
list<int> lt3(a, a+8);
list<int> lt4(b, b+8);
list<int> ltr1, ltr2;