public ListNode2<T> addAfter(ListNode2<T> node, T value) {
        ListNode2<T> newNode = new ListNode2<T>(value);
        addAfter(node, newNode);
        return newNode;
    }
@Test
    public void testAddAfter() {
        DoublyLinkedList<Integer> list = new DoublyLinkedList<Integer>();
        list.add(1);
        ListNode2<Integer> node2 = list.add(2);
        ListNode2<Integer> node4 = list.add(4);

        list.addAfter(node2, 3);
        assertEquals(4, list.size());
        assertArrayEquals(new Integer[]{1, 2, 3, 4}, list.toArray());

        ListNode2<Integer> node5 = list.addAfter(node4, 5);
        assertEquals(5, list.size());
        assertArrayEquals(new Integer[]{1, 2, 3, 4, 5}, list.toArray());
        assertEquals(new Integer(5), list.last());
        assertEquals(node5, list.head());
    }