import static org.junit.Assert.fail; public class LinkedListUtil { public static void assertSameList(ListNode<Integer> expected, ListNode<Integer> result) { ListNode<Integer> given = expected; ListNode<Integer> transformed = result; try { while (expected != null) { assertEquals(expected.data, result.data); expected = expected.next; result = result.next; } assertNull(result); } catch (AssertionError e) { StringBuilder errorMessage = new StringBuilder(); errorMessage.append("\nExpected: "+given.toString()+"\n"); if (transformed != null && transformed.data != null) errorMessage.append("Actual: "+transformed.toString()+"\n"); else errorMessage.append("Actual: null\n"); fail(errorMessage.toString()); } } public static ListNode<Integer> createLinkedList(Integer... integers) { ListNode<Integer> dummyHead = new ListNode<>(null); ListNode<Integer> list = dummyHead; for (Integer i : integers) { list.next = new ListNode<>(i); list = list.next; } return dummyHead.next; } private static void assertEquals(Integer a, Integer b) { if (!a.equals(b)) throw new AssertionError(); } private static void assertNull(ListNode<Integer> node) { if (node != null) throw new AssertionError(); } }