47 lines
1.4 KiB
Plaintext
47 lines
1.4 KiB
Plaintext
// This file is part of www.nand2tetris.org
|
|
// and the book "The Elements of Computing Systems"
|
|
// by Nisan and Schocken, MIT Press.
|
|
// File name: projects/09/List/List.jack
|
|
|
|
/** Represents a linked list of integers. */
|
|
class List {
|
|
field int data; // a list consists of a data field,
|
|
field List next; // followed by a list
|
|
|
|
/* Creates a List. */
|
|
constructor List new(int car, List cdr) {
|
|
let data = car; // the identifiers car and cdr are used in
|
|
let next = cdr; // memory of the Lisp programming language
|
|
return this;
|
|
}
|
|
|
|
/** Accessors. */
|
|
method int getData() { return data; }
|
|
method int getNext() { return next; }
|
|
|
|
/** Prints this list. */
|
|
method void print() {
|
|
var List current; // initializes current to the first item
|
|
let current = this; // of this list
|
|
while (~(current = null)) {
|
|
do Output.printInt(current.getData());
|
|
do Output.printChar(32); // prints a space
|
|
let current = current.getNext();
|
|
}
|
|
return;
|
|
}
|
|
|
|
/** Disposes this List by recursively disposing its tail. */
|
|
method void dispose() {
|
|
if (~(next = null)) {
|
|
do next.dispose();
|
|
}
|
|
// Uses an OS routine to recycle this object.
|
|
do Memory.deAlloc(this);
|
|
return;
|
|
}
|
|
|
|
// More list processing methods can come here.
|
|
|
|
}
|