ListNode<E> curr = new ListNode(head.getNext());//creates a curr pointer

This line is not doing what you want it to. You're trying to create a new ListNode<ListNode<E>> which has a data element...