首页 > 解决方案 > 用Java编写循环的首选方法是什么。请看下面的代码

问题描述

我正在尝试将节点 ( newNode) 添加到链表的末尾,为此,我正在尝试遍历到链表的末尾。

我首选的方法是创建head对列表的引用,然后解析直到我们到达最后一个元素。为此,我通常使用 while 循环。

Node ptr = head;
while (ptr.next != null) {
   ptr = ptr.next;
}
ptr.next = newNode

我遇到了这个实现相同的for循环

Node p, q;
for (p = head; (q = p.next) != null; p = q);
p.next = newNode;

我习惯了 Python 和“pythonic”的编码方式。因此,我想知道 Java 是否有更首选的方式?经验丰富的 Java 开发人员更喜欢上述两种方法中的哪一种?

标签: javalinked-list

解决方案


尽管这是一个主观问题,但每个人(或大多数人)都会同意第二个选项不可读。我错过;了最后的注意。

使您的代码可读且易于理解。不要让它看起来很聪明。

注意:这并不意味着您不应该使用for循环。使for循环等同于while循环。

for (Node ptr = head; ptr.next != null;) {
    ptr = ptr.next;
}

或者,至少在{}您的for循环代码中添加一个空主体。

for (p = head; (q = p.next) != null; p = q) {
}

我已经看到静态代码分析器规则设置为当循环有一个空的主体时编译/构建失败(像上面那样显式或者;在你的问题最后使用 a 时)。


推荐阅读