import org.junit.Test; import static org.junit.Assert.*; public class FindOverlappingWithCyclesTest { private ListNode<Integer> overlap; private ListNode<Integer> list1; private ListNode<Integer> list2; @Test public void testOverlappingWithCycles1() { list1 = LinkedListUtil.createLinkedList(1, 2, 3); list2 = LinkedListUtil.createLinkedList(4, 5, 6); overlap = null; test(overlap, list1, list2); } @Test public void testOverlappingWithCycles2() { list1 = LinkedListUtil.createLinkedList(1, 2); list2 = LinkedListUtil.createLinkedList(1, 2, 3, 4, 5); overlap = list1.get(2).next = list2.get(3); test(overlap, list1, list2); } @Test public void testOverlappingWithCycles3() { list1 = LinkedListUtil.createLinkedList(1, 2); list2 = LinkedListUtil.createLinkedList(2, 3, 4, 5); overlap = list1.get(2).next = list2.get(2); test(overlap, list1, list2); } @Test public void testOverlappingWithCycles4() { list1 = LinkedListUtil.createLinkedList(2); list2 = LinkedListUtil.createLinkedList(1, 2, 3, 4, 5); list1.get(1).next = list2.get(3); list2.get(5).next = list2.get(1); overlap = LinkedListUtil.createLinkedList(2, 3); test(overlap, list1, list2); } @Test public void testOverlappingWithCycles5() { list1 = LinkedListUtil.createLinkedList(1, 2, 3, 4, 5); list1.get(5).next = list1.get(1); list2 = LinkedListUtil.createLinkedList(1, 2, 3, 4, 5); list2.get(5).next = list2.get(1); overlap = null; test(overlap, list1, list2); } private void test(ListNode<Integer> overlap, ListNode<Integer> list1, ListNode<Integer> list2) { ListNode<Integer> result = FindOverlappingWithCycles.testOverlappingWithCycles(list1, list2); if (overlap == null) assertNull(result); else if (overlap.next != null) { assertNotNull(result); assertEquals(overlap.data, result.data); assertEquals(overlap.next.data, result.next.data); } } }