8.9. Additional Practice Exercises

8.9.1. Code Tracing

Code Tracing

To see sample solutions, toggle "Show Solutions" above.

Sample solutions not included, because "Show Solutions" was not toggled before printing.

Note

The objective of the following exercises is for students to understand how nodes are created and linked in memory using the Node class. They should be able to trace references step by step to predict program output and recognize that next can be reassigned.

Question 1

hide circle
hide empty members
set namespaceSeparator none
skinparam classAttributeIconSize 0
skinparam genericDisplay old
skinparam defaultFontName monospaced
skinparam defaultFontStyle bold
skinparam class {
    BackgroundColor LightYellow
    BackgroundColor<<interface>> AliceBlue
}
!includesub chap8-practice.common.puml!NODE

Draw the memory map for the following code:

Node n1 = new Node("A");
Node n2 = new Node("B");
n1.setNext(n2);
Sample Visualizations
Code visualization diagram for java/adt-and-links/practice:76 (line 5)

Note: The debugger breakpoint is on line 5.

Code visualization diagram for java/adt-and-links/practice:76 (line 6)

Note: The debugger breakpoint is on line 6.

Code visualization diagram for java/adt-and-links/practice:76 (line 7)

Note: The debugger breakpoint is on line 7.

Question 2

hide circle
hide empty members
set namespaceSeparator none
skinparam classAttributeIconSize 0
skinparam genericDisplay old
skinparam defaultFontName monospaced
skinparam defaultFontStyle bold
skinparam class {
    BackgroundColor LightYellow
    BackgroundColor<<interface>> AliceBlue
}
!includesub chap8-practice.common.puml!NODE

Draw the memory map for the following code and write the output given in the final line.

Node x = new Node("X");
x.setNext(new Node("Y"));
x.getNext().setNext(new Node("Z"));

System.out.println(x.getNext().getNext().getItem());
Sample Solution
Code visualization diagram for java/adt-and-links/practice:107 (line 5)

Note: The debugger breakpoint is on line 5.

Code visualization diagram for java/adt-and-links/practice:107 (line 6)

Note: The debugger breakpoint is on line 6.

Code visualization diagram for java/adt-and-links/practice:107 (line 8)

Note: The debugger breakpoint is on line 8.

Output Z

Question 3

hide circle
hide empty members
set namespaceSeparator none
skinparam classAttributeIconSize 0
skinparam genericDisplay old
skinparam defaultFontName monospaced
skinparam defaultFontStyle bold
skinparam class {
    BackgroundColor LightYellow
    BackgroundColor<<interface>> AliceBlue
}
!includesub chap8-practice.common.puml!NODE

Draw the memory map for the following code and write the output given in the final line.

1Node n1 = new Node("one");
2Node n2 = new Node("two");
3Node n3 = new Node("three");
4
5n1.setNext(n2);
6n2.setNext(n3);
7n1.setNext(n3);
8
9System.out.println(n1.getNext().getItem());
Sample Solution
Code visualization diagram for java/adt-and-links/practice:148 (line 5)

Note: The debugger breakpoint is on line 5.

Code visualization diagram for java/adt-and-links/practice:148 (line 6)

Note: The debugger breakpoint is on line 6.

Code visualization diagram for java/adt-and-links/practice:148 (line 8)

Note: The debugger breakpoint is on line 8.

Code visualization diagram for java/adt-and-links/practice:148 (line 9)

Note: The debugger breakpoint is on line 9.

Code visualization diagram for java/adt-and-links/practice:148 (line 10)

Note: The debugger breakpoint is on line 10.

Code visualization diagram for java/adt-and-links/practice:148 (line 12)

Note: The debugger breakpoint is on line 12.

Output

three

Question 4

hide circle
hide empty members
set namespaceSeparator none
skinparam classAttributeIconSize 0
skinparam genericDisplay old
skinparam defaultFontName monospaced
skinparam defaultFontStyle bold
skinparam class {
    BackgroundColor LightYellow
    BackgroundColor<<interface>> AliceBlue
}
!includesub chap8-practice.common.puml!NODE

Draw the memory map for the following code and write the output given in the final line.

 1 Node n1 = new Node("alpha");
 2 Node n2 = new Node("beta");
 3 Node n3 = new Node("gamma");
 4
 5 n1.setNext(n2);
 6 n2.setNext(n3);
 7
 8 Node p = n1.getNext();
 9 p.setNext(new Node("delta"));
10
11 System.out.println(n2.getNext().getItem());
Sample Solution
Code visualization diagram for java/adt-and-links/practice:196 (line 5)

Note: The debugger breakpoint is on line 5.

Code visualization diagram for java/adt-and-links/practice:196 (line 6)

Note: The debugger breakpoint is on line 6.

Code visualization diagram for java/adt-and-links/practice:196 (line 8)

Note: The debugger breakpoint is on line 8.

Code visualization diagram for java/adt-and-links/practice:196 (line 9)

Note: The debugger breakpoint is on line 9.

Code visualization diagram for java/adt-and-links/practice:196 (line 11)

Note: The debugger breakpoint is on line 11.

Code visualization diagram for java/adt-and-links/practice:196 (line 12)

Note: The debugger breakpoint is on line 12.

Code visualization diagram for java/adt-and-links/practice:196 (line 14)

Note: The debugger breakpoint is on line 14.

Output

delta

Question 5

hide circle
hide empty members
set namespaceSeparator none
skinparam classAttributeIconSize 0
skinparam genericDisplay old
skinparam defaultFontName monospaced
skinparam defaultFontStyle bold
skinparam class {
    BackgroundColor LightYellow
    BackgroundColor<<interface>> AliceBlue
}
!includesub chap8.common.puml!NODE

Draw the memory map for the code below and write the output produced by the following code:

4Node n1 = new Node("A");
5n1.setNext(n1);
6System.out.println(n1.getNext().getNext().getNext().getItem());
Solution
Question 6

hide circle
hide empty members
set namespaceSeparator none
skinparam classAttributeIconSize 0
skinparam genericDisplay old
skinparam defaultFontName monospaced
skinparam defaultFontStyle bold
skinparam class {
    BackgroundColor LightYellow
    BackgroundColor<<interface>> AliceBlue
}
!includesub chap8.common.puml!NODE

Draw the memory map for the code below and write the output produced by the following code:

4Node n1 = new Node("A");
5n1.setNext(new Node("B", n1));
6System.out.println(n1.getNext().getNext().getNext().getItem());
7System.out.println(n1.getNext().getNext().getNext().getNext().getItem());
Solution
Question 7

hide circle
hide empty members
set namespaceSeparator none
skinparam classAttributeIconSize 0
skinparam genericDisplay old
skinparam defaultFontName monospaced
skinparam defaultFontStyle bold
skinparam class {
    BackgroundColor LightYellow
    BackgroundColor<<interface>> AliceBlue
}
!includesub chap8-practice.common.puml!NODE

Draw the memory map for the following code and then write the output.

 4Node player1 = new Node("Mario");
 5player1.setItem("Luigi");
 6
 7new Node("Peach", player1);
 8
 9Node player2 = new Node("Yoshi");
10player2.setNext(player1);
11player1.setNext(new Node("Bowser"));
12player2.getNext().getNext().setNext(new Node("DonkeyKong"));
13
14Node player3 = player2.getNext().getNext();
15player3.getNext().setNext(new Node("Toad"));
16
17System.out.println(player3.getNext().getNext().getNext());
18System.out.println(player2.getItem());
19System.out.println(player1.getNext().getNext().getItem());
20System.out.println(player3.getNext().getNext().getItem());
21
22player1.setNext(new Node("Wario"));
23
24System.out.println(player1.getNext().getNext());
Solution

Output

null
Yoshi
DonkeyKong
Toad
null
Code visualization diagram for java/adt-and-links/practice:332 (line 4)

Note: The debugger breakpoint is on line 4.

Code visualization diagram for java/adt-and-links/practice:332 (line 5)

Note: The debugger breakpoint is on line 5.

Code visualization diagram for java/adt-and-links/practice:332 (line 7)

Note: The debugger breakpoint is on line 7.

Code visualization diagram for java/adt-and-links/practice:332 (line 9)

Note: The debugger breakpoint is on line 9.

Code visualization diagram for java/adt-and-links/practice:332 (line 10)

Note: The debugger breakpoint is on line 10.

Code visualization diagram for java/adt-and-links/practice:332 (line 11)

Note: The debugger breakpoint is on line 11.

Code visualization diagram for java/adt-and-links/practice:332 (line 12)

Note: The debugger breakpoint is on line 12.

Code visualization diagram for java/adt-and-links/practice:332 (line 14)

Note: The debugger breakpoint is on line 14.

Code visualization diagram for java/adt-and-links/practice:332 (line 15)

Note: The debugger breakpoint is on line 15.

Code visualization diagram for java/adt-and-links/practice:332 (line 22)

Note: The debugger breakpoint is on line 22.