CS61B 课程笔记(Midterm 1)
CS61B 课程笔记(Midterm 1)
Q4: Destructively Create a Copy of IntList Without a Given Value
题目描述
编写一个方法 dilsans
,用于在不使用 new
关键字的情况下,递归地创建一个 IntList
的副本,但不包含给定的值 y
。
代码实现
1 | /** Destructively creates a copy of x that contains no y. You may not use new. */ |
代码分析
- 基本情况:
- 如果传入的
IntList x
为null
,则直接返回null
。
- 如果传入的
- 递归处理:
- 使用
x.rest = dilsans(x.rest, y)
递归调用该方法,处理x
的下一个节点。这样可以构建剩余节点的副本。
- 使用
- 节点检查:
- 检查当前节点的值是否等于
y
:- 如果是,则返回
x.rest
,丢弃当前节点。 - 如果不是,则返回当前节点
x
,保留它。
- 如果是,则返回
- 检查当前节点的值是否等于
Q5: Purge Method for Stack Interface
题目描述
为 Stack
接口添加一个默认方法
purge(Item x)
,用于从栈中消除所有实例的
x
,但保持栈的其他内容不变。
代码实现
1 | public interface Stack<Item> { |
代码分析
- 基本情况:
- 如果栈的大小为 0,直接返回,无需处理。
- 弹出元素:
- 使用
Item top = pop();
弹出栈顶元素。
- 使用
- 递归调用:
- 递归调用
purge(x)
,处理栈中剩余的元素。
- 递归调用
- 条件判断:
- 检查
top
是否等于x
:- 如果不等,则将其重新推入栈中,保持栈的状态不变。
- 如果相等,则不做任何操作,继续处理下一个元素。
- 检查
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Totoroの旅!
评论