import java.util.*;
public class FindFirstNode {
public static class Node {
private Integer id;
private Integer nextId;
public Node(Integer id, Integer nextId) {
this.id = id;
this.nextId = nextId;
}
@Override
public String toString() {
return String.format("Node(id:%d; nextId:%d)", id, nextId);
}
}
public static int findFirstNode(ArrayList<Node> list) {
if (list == null || list.size() <= 0) {
return 0;
}
Set<Integer> fromSet = new HashSet<>();
Set<Integer> toSet = new HashSet<>();
for (Node node : list) {
if (node.id != null) {
fromSet.add(node.id);
}
if (node.nextId != null) {
toSet.add(node.nextId);
}
}
if (fromSet.size() < toSet.size() || fromSet.size() > toSet.size() + 1) {
return 0;
}
fromSet.removeAll(toSet);
if (fromSet.size() != 1) {
return 0;
} else {
for (Integer id : fromSet) {
return id;
}
}
return 0;
}
public static void main(String[] args) {
ArrayList<Node> list = new ArrayList<>();
list.add(new Node(2, 3));
list.add(new Node(3, null));
list.add(new Node(1, 2));
System.out.println(findFirstNode(list));
}
}