public static Node intersectionOf2Lists(LinkedList list, LinkedList list2) {           
        if (list == null || list2 == null || list.size() == 0 || list2.size() == 0)
            return null;
            
        int list1Length = list.size();
        int list2Length = list2.size();
        Node list1Node = list.getHead();
        Node list2Node = list2.getHead();
       
        // advance the longer List by the difference of the lengths so the each List's length will technically be the same
        if (list1Length >= list2Length) {
            for (int i = 0; i < list1Length - list2Length; i++)
                list1Node = list1Node.next;
        } else {
            for (int i = 0; i < list2Length - list1Length; i++)
                list2Node = list2Node.next;           
        }
       
        while (list1Node != null) {
            if (list1Node.value == list2Node.value) 
                return list1Node;
            
            list1Node = list1Node.next;
            list2Node = list2Node.next;
        }    
        
        return null;
    }