编辑代码

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) {
        //TODO your impl code
        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));
    }
}