您的位置:首页 > 其它

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

2018-09-28 12:59 141 查看

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

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);

}

}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  单向链表 查看 交集