ANSWERS TO "Be Prepared" AB-1, Part 2, Question 1 private ListNode split() { ListNode node = myCardsList; for(int k = 1; k < (numCards+1)/2; k++) node = node.getNext(); ListNode temp = node.getNext(); node.setNext(null); return temp; } private ListNode combine(ListNode list1, ListNode list2) { ListNode node1 = list1, node2 = list2; ListNode result = null, tail = null; while(node1 != null || node2 != null) { if(node1 != null) { if(tail == null) result = node1; else tail.setNext(node1); tail = node1; node1 = node1.getNext(); } if(node2 != null) { if(tail == null) result = node2; else tail.setNext(node2); tail = node2; node2 = node2.getNext(); } } tail.setNext(null); return result; } public void shuffle(int numTimes) { for(int k=1; k <= numTimes; k++) { ListNode secondHalf = split(); myCardsList = combine(secondHalf, myCardsList); } }