我的问题在我的main方法中,如何向链表中添加多个节点....我现在先从节点2和节点3开始..我以为我添加了这些节点,但是我意识到我并没有对这些节点和它们的值做任何事情,对吗?如何使用setData()和setNext()来添加所有这些节点?这有意义吗?
ListNode<String> node4 = new ListNode<String>("Fourth", null);
ListNode<String> node3 = new ListNode<String>("Third", node4);
ListNode<String> node2 = new ListNode<String>("Second", node3);
ListNode<String> first = new ListNode<String>("First", node2);
如果上面设置了值,如何将它们全部添加?
然后,我需要为每一项设置数据和下一步吗?(这似乎是多余的,因为我似乎在上面的构造函数中设置了每个节点的值。)
first.setData("first");
first.setNext(node2);
node2.setData("Second");
node2.setNext(node2);
//.....
我正在尝试添加上述所有节点,以便通过添加新节点来测试我的addLast()方法。但是,当我在main中调用我的addLast()方法时,正如您在下面看到的那样,唯一打印的是我添加的addLast()值(如果我调用addFirst(),则首先打印)。
测试类
public class LinkedListDriver
{
public static void main(String[] args) {
//List<String> list = new LinkedList<String>(); //comment out this line to test your code
SinglyLinkedList<String> list = new SinglyLinkedList<String>(); //remove comment to test your code
ListNode<String> node4 = new ListNode<String>("Fourth", null);
ListNode<String> node3 = new ListNode<String>("Third", node4);
ListNode<String> node2 = new ListNode<String>("Second", node3);
ListNode<String> first = new ListNode<String>("First", node2);
ListNode value = new ListNode("First", new ListNode("Second", new ListNode("Third", null)));
//I've been messing around with this but
list.addFirst(first.getData());
list.addFirst("Second");
list.addLast("Fifth");
list.printList();
}
}
我没有添加我的其他两个类,因为我认为这是不相关的,但如果你想看,让我知道。我很新,这只是我的第二堂课,它是在线的,是很差的构造类,请很好lol
SinglyLinkedList类
//This class implements a very simple singly-linked list of Objects
public class SinglyLinkedList<E>
{
ListNode<E> first; // first element
public SinglyLinkedList() {
first = null;
}
public E getFirst() {
if (first == null) {
throw new NoSuchElementException();
} else
return first.getData();
}
public void addFirst(E value) {
first = new ListNode<E>(value, first);
}
// Methods below implemented by you. Note: while writing methods, keep in mind
// that you might be able to call other methods in this class to help you - you
// don't always need to start from scratch(but you'll have to recognize when)
public void addLast(E value) {
ListNode<E> temp = first;
//If list is empty make new node the first node.
if (temp == null) {
first = new ListNode <E>(value, null);
first.setNext(null);
}//Otherwise loop to end of list and add new node.
else {
while (temp.getNext() != null) {
temp = temp.getNext();
}
temp.setNext(new ListNode<E>(value, null));
}
}//end addLast
// throws an exception - you decide when and which one
public E getLast() {
ListNode<E> temp = first;
if (temp == null) {
throw new NullPointerException("There are no elements in this list to get.");
} else {
while (temp.getNext() != null) {
temp = temp.getNext();
}
return temp.getData();
}
}
// throws an exception - you decide when and which one
public E removeFirst() {
if (first == null) {
throw new NullPointerException("There are no elements in this list to remove.");
}
ListNode<E> tempRemove = first;
return null; //just so it'll compile
}
// throws an exception - you decide when and which one
public E removeLast() {
return null; //just so it'll compile
}
// return the number of elements in the list
public int size() {
return 0; //just so it'll compile
}
// return true if o is in this list, otherwise false
public boolean contains(E obj) {
return true; //just so it'll compile
}
public void printList(java.io.PrintStream out) {
if (first == null) {
System.out.println("The list is empty");
}
ListNode<E> current = first;
while (current != null) {
System.out.println(current.toString());
current = current.getNext();
}
}
public String toString() {
String s = "[";
ListNode<E> current = first;
//write code to traverse the list, adding each object on its own line
while (current.getNext() != null) {
current = current.getNext();
}
s += "]";
return s;
}
// OPTIONAL: just for fun...and a challenge
public void reverse() {
}
}
ListNode类是您的基本getNext setNext,getData setData....
你想做什么?如果您试图填充链表,您需要做的就是不断调用list.addLast,它将接受一个参数(您正在添加的新节点中的数据),并处理创建新节点并将其放在列表的后面。
我假设您不需要在主节点中创建任何节点,因为它们通常完全由 linklist 类处理。
几点,主要是总结评论:
您根本不应该使用main()
中的ListNode
objects-这应该是singleLinkedList
类的工作ListNode
甚至不需要对代码的其余部分可见,它可以是SingleyLinkedList
中的嵌套类。您应该只与singleLinkedList
交换数据对象(本例中为字符串)。
例如,如果您想测试addLast()
方法,您可以从一个空列表开始并重复调用list.addLast()
,正如Shane在他的答案中提到的那样。这样,您将确保它在列表为空和非空时都有效。
SinglyLinkedList<String> list = new SinglyLinkedList<String>();
list.addLast("first");
list.addLast("second");
list.addLast("third");
list.printList(System.out);
至于在一次调用中添加多个节点——这个链表没有这样做的方法。例如,您可以添加一个方法来添加一个数组的所有元素,但是您可以只顺序调用< code>addLast()来获得相同的效果。如果您想从测试其他方法的一些基本数据开始,您可以在主类中创建一些helper方法来以这种方式填充列表。
附带说明:如果printList()
将java.io.PrintStream
作为参数,则应该使用它而不是System.out
out.println(...)
代替
System.out.println(...)
此外,最好抛出 NoSuchElement 例外
,而不是空点例外
,以指示请求的元素不存在。
如果你想要一种方便的方式来填充列表,你可以在你的主类中有这样的东西:
static <E> void addToList(SinglyLinkedList<E> list, E... values) {
for (E value : values) {
list.addLast(value);
}
}
像这样使用它:
SinglyLinkedList<String> list = new SinglyLinkedList<String>();
addToList(list, "first", "second", "third");
我正在做一个项目,以创建一个超过2个子节点的树。我明白在创建二叉树时,我们可以只创建一个左节点和一个右节点来充当子节点,但当我在网上寻找创建树的帮助时,我找到的每一个解决方案都谈到了创建二叉树。我明白创建树的部分意味着您需要创建子节点数组或arraylist,但我不明白如何将数据放入数组,或者如何将子节点数组“连接”到父节点? 这是我目前掌握的代码。我知道这不是很多,但我正在努力刚刚开始这个项目。
我试图在文件如下示例:如何为Firebase构建云函数,以便从多个文件部署多个函数?。 特别是,我有一个: 现在在index.ts我可以导入并附加一个用户身份验证侦听器,以便在创建新用户时触发,即: 然而,据我所知,只有实际上按预期工作,并且导出。userEvents似乎不会在创建新用户时触发。 ===================================================
我有Firebase结构,其中包含Android中的用户和组。这是多对多的关系。 Firebase结构 在组节点中添加任何用户时,我也会在用户节点中添加组,但不使用任何类型的事务机制。 现在,我需要执行delete group案例,其中将删除group节点以及每个用户加入的用户节点内的group属性。此场景中必须有一个事务。到目前为止,我已经处理了依赖于相同节点但不依赖于不同节点的事务代码。 我需
●途经点添加最多不能超过50个。 ●可以不添加终点。 注意事项: ●保存路线可以在已有图层或是新建图层。 [查看原图]
我目前正在研究将多台机器中的节点添加到集群中。主节点应该是x. x. x.246,我要添加的数据节点是x. x. x.99。运行最新的elasticsearch 7.6。我已经确定这两个弹性是相同的版本。 代码有什么问题?我想我遵循了这个指示 新主节点配置的错误日志: 任何帮助或指示将不胜感激。谢谢你。
扩展Ext.form.field.Picker我正在创建一个自定义组件。它非常类似于日期选择器,但我用复选框展开了一棵树,而不是日历。当选中一个节点时,我必须用节点的文本手动设置textfield的值。我的问题是,如何向textfield添加/删除节点?为了补充,我正在做类似的事情 但是有没有更好的方法将树选择添加到文本字段? 更重要的是,我如何删除一个值,比如value2 文本字段:值1、值2、