Key to CSE143 Midterm, Spring 2019 handout #17
1. Method Call Output Produced
------------------------------------------------
mystery(2); 2+
mystery(5); 52+-
mystery(7); 731---
mystery(18); 8942++-+
mystery(21); 1052+-+-
2. One possible solution appears below.
public String undouble(String s) {
if (s.length() < 2) {
return s;
} else if (s.charAt(0) == s.charAt(1)) {
return s.charAt(0) + undouble(s.substring(2));
} else {
return s.charAt(0) + undouble(s.substring(1));
}
}
3. Statement Output
------------------------------------------------------------
var1.method2() Box 2
var2.method2() Jar 2
var3.method2() Cup 2/Box 2
var4.method2() Jar 2
var5.method2() compiler error
var6.method2() Pill 2
var1.method3() Box 2/Box 3
var2.method3() compiler error
var3.method3() Cup 2/Box 2/Box 3
var4.method3() Jar 2/Box 3
((Cup)var1).method1() runtime error
((Jar)var2).method1() Jar 1
((Cup)var3).method1() Cup 1
((Cup)var4).method1() runtime error
((Jar)var4).method2() Jar 2
((Box)var5).method2() Box 2
((Pill)var5).method3() compiler error
((Jar)var2).method3() Jar 2/Box 3
((Cup)var3).method3() Cup 2/Box 2/Box 3
((Cup)var5).method3() runtime error
4. before after code
-----------------------+-----------------------+-------------------------------
p->[1]->[2] | p->[1]->[2]->[3] | p.next.next = q;
| | q = null;
q->[3] | q |
-----------------------+-----------------------+-------------------------------
p->[1] | p->[2]->[1] | ListNode temp = q;
| | q = q.next;
q->[2]->[3] | q->[3] | temp.next = p;
| | p = temp;
-----------------------+-----------------------+-------------------------------
p->[1]->[2] | p->[2]->[4] | p.next.next = q.next;
| | q.next = null;
q->[3]->[4] | q->[1]->[3] | ListNode temp = p;
| | p = p.next;
| | temp.next = q;
| | q = temp;
-----------------------+-----------------------+-------------------------------
p->[1] | p->[2]->[1]->[4] | p.next = q.next.next;
| | q.next.next = null;
q->[2]->[3]->[4]->[5] | q->[5]->[3] | ListNode temp = p;
| | p = q;
| | q = temp.next.next;
| | q.next = p.next;
| | p.next = temp;
| | temp.next.next = null;
-----------------------+-----------------------+-------------------------------
5. One possible solution appears below.
public void removeMax() {
if (size == 0) {
throw new IllegalStateException();
}
int max = 0;
for (int i = 1; i < size; i++) {
if (elementData[i] > elementData[max]) {
max = i;
}
}
for (int i = max; i < size - 1; i++) {
elementData[i] = elementData[i + 1];
}
size--;
}
6. One possible solution appears below.
public void makePalindrome(Stack s) {
Queue q = new LinkedList();
while (!s.isEmpty()) {
q.add(s.pop());
}
for (int i = 0; i < q.size(); i++) {
int n = q.remove();
q.add(n);
s.push(n);
}
int oldSize = q.size();
for (int i = 0; i < oldSize; i++) {
int n1 = q.remove();
int n2 = s.pop();
if (n1 == n2) {
q.add(n1);
}
}
while (!q.isEmpty()) {
s.push(q.remove());
}
}
Stuart Reges
Last modified: Fri Sep 16 16:16:07 PDT 2011