用单向链表查看交集和差集
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);
}
}
以上是关于用单向链表查看交集和差集的主要内容,如果未能解决你的问题,请参考以下文章