用单向链表查看交集和差集

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用单向链表查看交集和差集相关的知识,希望对你有一定的参考价值。

写了小的帮助类,留作纪念

import java.util.ArrayList;
import java.util.List;

// 链表的节点
class Node {

public int  data;
public Node next;

public Node(int data){
    this.data = data;

}

public int getData() {
    return data;
}

}

public class TestNode {

// 头结点
public Node head=new Node(-999);

// 头部插入节点

public void insertFirst(Node node) {
    Node temp = head;   
    while(temp.next != null){   
        temp = temp.next;     
    }
    temp.next = node;
}

// 打印列表
public void print(){
    Node temp = head.next;
    while(temp != null){
        System.out.print(temp.data+",");
        temp = temp.next;
    }
    System.out.println();
}

//找出差集
public static List<Integer> getSub(TestNode a,  TestNode b){
    Node n1=a.head.next;
    Node n2=b.head.next;
    List<Integer> res=new ArrayList<Integer>();

    while(n1!=null && n2!=null){
        if(n1.data==n2.data){
            n1=n1.next;
            n2=n2.next;
        }else if(n1.data<n2.data){
            res.add(n1.data);
            n1=n1.next;
        }else{
            while(n2.data<n1.data){
                if(n2.next!=null){
                    n2=n2.next;
                }else{
                    n2=null;
                    break;
                }
            }
        }
    }

    if(n1!=null){
        res.add(n1.data);
        while(n1.next!=null){
            res.add(n1.next.data);
            n1 = n1.next;
        }
    }

    System.out.println(JSON.toJSONString(res)); 
    return res;
}

//找出交集
public static List<Integer> getSame(TestNode a,  TestNode b){
    Node n1=a.head.next;
    Node n2=b.head.next;
    List<Integer> res=new ArrayList<Integer>();

    while(n1!=null && n2!=null){
        if(n1.data==n2.data){
            res.add(n1.data);
            n1=n1.next;
            n2=n2.next;
        }else if(n1.data<n2.data){
            n1=n1.next;
        }else{
            while(n2.data<n1.data){
                if(n2.next!=null){
                    n2=n2.next;
                }else{
                    n2=null;
                    break;
                }
            }
        }
    }

    System.out.println(JSON.toJSONString(res)); 
    return res;
}

public static void main(String[] args) {
    TestNode node = new TestNode();
    node.insertFirst(new Node(1));
    node.insertFirst(new Node(3));
    node.insertFirst(new Node(7));
    node.insertFirst(new Node(9));
    node.insertFirst(new Node(11));

    TestNode node2 = new TestNode();
    node2.insertFirst(new Node(1));
    node2.insertFirst(new Node(9));
    node2.insertFirst(new Node(8));

    getSame(node, node2);

}

}

以上是关于用单向链表查看交集和差集的主要内容,如果未能解决你的问题,请参考以下文章

用java编写程序,求集合的并集、交集和差集

java 求交集 并集 差集

Hive 差集交集并集

Excel 怎样求差集,并集和交集还有容错

SQL集合运算:差集、交集、并集

java找到两个list的交集并集差集