【发布时间】:2019-04-04 00:24:22
【问题描述】:
我正在尝试编写一个方法,该方法接受一个整数 n 并返回一个新列表,其中包含其当前对象 List 的前 n 个元素,其顺序与它们在当前列表中出现的顺序相同。
下面提供了我的解决方案:
public List firstNelements(int n) {
List newList = newList();
Node travel = head, last = null, newNode;
int counter = 0;
while (counter < n && travel != null) {
newNode = new Node();
newNode.data = travel.data;
if (last == null)
last = newList.head = newNode;
else last = last.next = newNode;
counter++;
travel = travel.next;
}
return newList;
}
我了解该方法从声明一个新列表开始。从那里,它声明了“旅行”节点,用于遍历当前列表。另外,我相信“last”只是用来跟踪当前对象中的最后一个节点。
我也理解了while循环的第一部分;但是,我不明白为什么有条件
if (last == null)
last = newList.head = newNode;
else last = last.next = newNode;
存在。第一次执行代码时,节点“last”为空,所以在第一次迭代中,我猜我们将 newNode 设置为新列表的头部。但是为什么我们也要最后更新呢?这是否意味着“last”正在跟踪新列表中的最后一个节点?我也不知道“其他”语句在这里做什么。
我已经在 n = 2 的情况下遍历了列表 {1, 2, 3}。但是,我仍然无法理解它。 while 循环的其余部分(在这个条件之后)对我来说是有意义的。
【问题讨论】:
标签: java linked-list singly-linked-list