在Java中将两个链表添加到第三个链表时,我偶然发现了一个奇怪的问题,第一个链表"myList1",第二个链表"myList2",第三个"myList3"。
组合方法应该将第一个LinkedList"myList1",然后将第二个"myList2"添加到第三个LinkedList"myList3"中,但我在第三个列表为空时将它们添加到该列表中时遇到了问题,但如果第三个列表至少有一个元素,则一切都会顺利进行。
代码:
Node current = myList1.head;
while (current != null) {
Node newcurrent = myList3.head;
int h1 = current.getData();
Node newNode = new Node(h1);
if (newcurrent == null)
//the problem is with this code
newcurrent = newNode;
else {
if (newcurrent.getLink() == null) {
newNode.setLink(newcurrent.getLink());
newcurrent.setLink(newNode);
} else {
Node current11 = newcurrent;
while (current11.getLink() != null) {
current11 = current11.getLink();
}
current11.setLink(newNode);
}
}
current = current.getLink();
}
如果第三个列表为空,则不会将该节点添加到第三个LinkedList中,并且我尝试了许多其他代码,但也不起作用,但如果我在第三个LinkedList中输入了至少一个元素,则会正常添加该列表。
我尝试过的其他代码:
newcurrent.setLink(newNode);
和
newNode = newcurrent;
newcurrent = newNode;
和
newNode.setLink(newcurrent);
newcurrent.setLink(newNode);
和
newNode.link = newcurrent;
newcurrent.link = newNode;
我认为这有点过于复杂了。列表中的链接已经存在。您只需要将myList3.tail
链接到myList1.head
,而不需要单独循环添加每个节点。由于您看起来不像是在存储tail
,因此需要迭代到myList3
的末尾才能找到它
if (myList3.head == null)
myList3.head = myList1.head;
else {
Node list3iter = myList3.head;
while (list3iter.getLink() != null) {
list3iter = list3iter.getLink();
}
list3iter.setLink(myList1.head);
}
}
还有一点需要注意的是,我发现试图记录current
、current11
、newcurrent
等名字很痛苦。它们对我的大脑来说都意味着同样的东西。如果你和我一样,多一点描述性的命名可能会帮助你跟踪变量在这里的作用。
Node newcurrent = myList3.head;
....
if (newcurrent == null)
//the problem is with this code
newcurrent = newNode;
不知道为什么有两个列表,但上面的最后一行只是分配给局部变量。应该改为如下吗?
myList3.head = newNode