【发布时间】:2017-04-03 07:27:13
【问题描述】:
我开始用 Java 学习数据结构和算法。
我从列表开始,我学到的第一个概念是数组和列表的区别。
现在在列表中,我学习如何将元素插入到列表中并在屏幕上显示。我得到了两段代码。第一个我非常了解;第二个令人困惑的地方。
我的困惑是这里的 Node 是什么?一开始我们声明Node head;。那么这里的Node基本上是什么?
它是预定义的数据类型还是什么?另外,第二个程序是如何进行的?第二个程序与第一个程序有何不同?又有什么区别呢?
我也知道我们在这里使用 util,但我仍然想知道,因为人们如何在行业中使用它。
第一种方法:
import java.util.*;
public class TestCollection7 {
public static void main(String args[]) {
LinkedList<String> al = new LinkedList<String>();
al.add("Ravi");
al.add("Vijay");
al.add("Ravi");
al.add("Ajay");
Iterator<String> itr = al.iterator();
while(itr.hasNext()) {
System.out.println(itr.next());
}
}
}
第二种方法:
package javaapplication3;
public class LIstTEst {
Node head;
static class Node {
int data;
Node next;
Node(int d) {
data = d;
next = null;
}
}
public void PrintList() {
Node n = head;
while(n != null){
System.out.print(n.data+" ");
n = n.next;
}
}
public static void main(String args[]) {
LIstTEst llist = new LIstTEst();
llist.head = new Node(1);
Node second = new Node(2);
Node third = new Node(7);
llist.head.next = second;
second.next = third; = third;
llist.PrintList();
}
}
【问题讨论】:
-
请注意,您的第二个示例存在缺陷:首先,您将
head.next设置为second即可。但是之后,您将其设置为“第三”,这是错误的。您应该将second.next设置为third。照原样,您从列表中丢失了second节点。实际上,列表实现应该有一个add方法来创建一个新节点,设置它的值并将尾部的next引用设置为新节点。为了清楚起见:您的列表以“head->third”结尾,但应该是“head->second->third”。 -
@Fildor 你说得对,我在本地调试器中更改了我的代码。
-
@Fildor 所以基本上你建议我应该使用
add方法而不是Node 和所有。 -
不,您仍然需要 Node 类。但是您的客户不应该直接处理它。您的列表实现应该提供一个从处理节点引用中抽象出来的 API。例如,用户应该使用的所有方法都是
void add(int newValue)。看LinkedList的API。它也使用节点,但作为客户端,您不知道这一点。 -
它甚至可以编译吗?
second.next = third; = third;看起来很可疑(更改为 revision 3)。
标签: java list data-structures