我正在编写代码以在链表的末尾插入元素。但是,如果没有在结尾使用分号,我无法正确更新列表,这个分号的意义是什么,这对我的代码有何影响?
public void insertAtEnd() throws IOException {
LinkedList node=new LinkedList();
System.out.println("Enter an element");
int value=Integer.parseInt(br.readLine());
node.setData(value);
LinkedList p,q;
for(p=head; (q=p.getNext())!=null; p=q);
p.setNext(node);
}
答案 0 :(得分:6)
分号表示下面的语句不会被执行,直到循环退出。你的情况,循环将p带到列表的末尾(最后一个元素),然后下一个语句将其下一个值赋给新元素
答案 1 :(得分:2)
嗯,它现在构造为for(p=head; (q=p.getNext())!=null; p=q);
的方式,for循环有一个空体。通过p
和q
分配的变量p.getNext()
和p=q
正在更新。然后它一次执行p.setNext(node);
。
编辑:至于代码为什么使用分号,这是因为你在列表中推进了变量p和q。虽然空体的for
循环很好,但我认为传统上会看到while
循环。
p.setNode(node);
的缩进使其看起来好像该语句与for
循环相关,但实际上并非如此,因为目标是找到链接的结尾通过迭代来列出。
(注意:其他人在我输入这个答案时提出了类似的观点)
答案 2 :(得分:1)
它需要被删除,它导致它在循环中什么都不做。
循环将在循环后执行下一个代码块。一个语句或一个{}代码块。
在这种情况下,你有一个语句;
,所以它"执行"什么都不做,然后在循环结束后调用你的p.setNext(node);
。
public void insertAtEnd() throws IOException {
LinkedList node=new LinkedList();
System.out.println("Enter an element");
int value=Integer.parseInt(br.readLine());
node.setData(value);
LinkedList p,q;
for(p=head; (q=p.getNext())!=null; p=q)
p.setNext(node);
}
答案 3 :(得分:1)
分号实际上是因为你的缩进而改变了你想要做的事情:
for(p=head; (q=p.getNext())!=null; p=q)
{
p.setNext(node);
}
进入以下内容:
for(p=head; (q=p.getNext())!=null; p=q)
{
}
p.setNext(node);
因此,使用分号,循环在每次迭代时都不执行任何操作。然后,在完成执行后,您只需运行p.setNext(node);
一次。
通常你可以通过显式编写花括号来避免这个问题,正如我在这两个代码段中所做的那样。目前尚不清楚您正在尝试完成哪个代码段。
答案 4 :(得分:0)
for语句提供了一种迭代一系列值的简洁方法。程序员经常将其称为" for循环"因为它反复循环直到满足特定条件的方式。 for语句的一般形式可表示如下:
for (initialization; termination; increment) {
//statement(s)
}
使用此版本的for语句时,请记住:
在你的情况下,循环将p带到列表的末尾(最后一个元素),然后下一个语句将其下一个值赋给新元素