Key to CSE143 Midterm, Winter 2014 handout #21
1. Method Call Output Produced
------------------------------------------------
mystery(7); 7
mystery(38); 838
mystery(194); 49194
mystery(782); 28782
mystery(3842); 2483842
2. One possible solution appears below.
public void showSplit(int n) {
if (n < 0) {
throw new IllegalArgumentException();
} else if (n <= 1) {
System.out.print(n);
} else {
System.out.print(n + " = (");
showSplit(n / 2 + n % 2);
System.out.print(", ");
showSplit(n / 2);
System.out.print(")");
}
}
3. before after code
-----------------------+-----------------------+-------------------------------
p->[1]->[2] | p->[2] | q.next = p;
| | p = p.next;
| | q.next.next = null;
q->[3] | q->[3]->[1] |
-----------------------+-----------------------+-------------------------------
p->[1] | p->[3] | p.next = q;
| | q = p;
| | p = p.next.next;
q->[2]->[3] | q->[1]->[2] | q.next.next = null;
-----------------------+-----------------------+-------------------------------
p->[1]->[2] | p->[3]->[2]->[1] | p.next.next = p;
| | ListNode temp = q.next;
| | q.next = p.next;
q->[3]->[4] | q->[4] | p.next = null;
| | p = q;
| | q = temp;
-----------------------+-----------------------+-------------------------------
p->[1]->[2] | p->[1]->[3]->[5] | ListNode temp = p.next;
| | p.next = q;
| | temp.next = q.next;
q->[3]->[4]->[5] | q->[2]->[4] | q.next = q.next.next;
| | q = temp;
| | q.next.next = null;
-----------------------+-----------------------+-------------------------------
4. Statement Output
------------------------------------------------------------
var1.method2(); Neck 2
var2.method2(); Leg 2
var3.method2(); Leg 2
var4.method2(); compiler error
var5.method2(); Head 2
var6.method2(); Neck 2
var1.method3(); Arm 3/Neck 2
var2.method3(); compiler error
var3.method3(); compiler error
var4.method3(); compiler error
var5.method3(); Arm 3/Head 2
var6.method3(); Arm 3/Neck 2
((Neck)var5).method1(); runtime error
((Arm)var3).method3(); Arm 3/Leg 2
((Arm)var4).method1(); compiler error
((Neck)var1).method1(); Head 1/Leg 2
((Head)var4).method1(); Head 1/Leg 2
((Arm)var2).method3(); runtime error
((Head)var3).method1(); runtime error
((Leg)var4).method2(); Head 2
5. One possible solution appears below.
public void rearrangeDuplicates(Queue q) {
Stack s = new Stack();
if (q.size() > 1) {
int oldSize = q.size();
int prev = q.remove();
q.add(prev);
for (int i = 0; i < oldSize - 1; i++) {
int n = q.remove();
if (n != prev)
q.add(n);
else
s.push(n);
prev = n;
}
int newCount = q.size();
while (!s.isEmpty())
q.add(s.pop());
for (int i = 0; i < newCount; i++)
q.add(q.remove());
for (int i = 0; i < oldSize - newCount; i++)
s.push(q.remove());
while (!s.isEmpty())
q.add(s.pop());
}
}
6. One possible solution appears below.
public void removeLast(int n) {
int index = -1;
for (int i = 0; i < size; i++) {
if (elementData[i] == n) {
index = i;
}
}
if (index != -1) {
for (int j = index; j < size - 1; j++) {
elementData[j] = elementData[j + 1];
}
size--;
}
}
Stuart Reges
Last modified: Fri Sep 16 16:16:07 PDT 2011