两个链表求并集、交集、差集
两个链表求并集、交集、差集
两个链表求并集、交集、差集其实都是创建一个新链表然后遍历插入的题型,所以下边就举并集一个例子。
- 首先将l1里的所有节点遍历存储到新节点l中
- 开始遍历l2,如果l中不存在l2中的节点就将其尾插到l中
下面是两个链表求并集、交集、差集的代码实现:
class Main {
//并集
public static List<Integer> union(List l1,List l2){
List<Integer> l=new LinkedList<>();
for (int i = 0; i < l1.size(); i++) {
l.add((Integer) l1.get(i));
}
for (int i = 0; i < l2.size(); i++) {
for (int j = 0; j < l1.size();j++) {
if(l2.get(i).equals(l1.get(j))){
break;
}
if(j==l2.size()-1){
l.add((Integer) l2.get(i));
}
}
}
return l;
}
public static List<Integer> intersection(List l1,List l2){
List<Integer> l=new LinkedList<>();
for (int i = 0; i < l1.size(); i++) {
for (int j = 0; j < l2.size(); j++) {
if(l1.get(i).equals(l2.get(j))){
l.add((Integer) l1.get(i));
}
}
}
return l;
}
//链表实验
//任务二
//差
public static List<Integer> diff(List l1,List l2){
//创建一个新链表存储差集
List<Integer> l=new LinkedList<>();
//遍历比较
for (int i = 0; i < l1.size(); i++) {
for (int j = 0; j < l2.size(); j++) {
if(l1.get(i).equals(l2.get(j))){
break;
}
if(j==l2.size()-1){
l.add((Integer) l1.get(i));
}
}
}
return l;
}
public static void main(String[] args) {
//创建三个链表
List<Integer> l1=new LinkedList<>();
List<Integer> l2=new LinkedList<>();
//初始化l1和l2
l1.add(1);
l1.add(2);
l1.add(3);
l1.add(4);
l2.add(2);
l2.add(11);
System.out.println("集合l1:"+l1);
System.out.println("集合l2:"+l2);
//并集
System.out.println("l1和l2的并集:"+union(l1,l2));
//交集
System.out.println("l1和l2的交集:"+intersection(l1,l2));
//差集
System.out.println("l1-l2:"+diff(l1,l2));
System.out.println("l2-l1:"+diff(l2,l1));
}
}
实验结果如下所示: