LinkedListA = 3-> 4-> 5
LinkedListB = 12-> 6-> 9
我只是想在第一个linkedlistA的末尾添加linkedlistB。 我无法弄清楚为什么 final while while循环能够打印 完整的linkedlistA以及从linkedlistB添加的所有节点!
public static void joinLists(Node headA, Node headB)
{
Node currentA = headA;
Node currentB = headB;
while( currentA.nextLink != null )
{
currentA = currentA.nextLink;
}
Node newElement = currentB;
currentA.nextLink = newElement; //there is not loop here as you can see to keep updating the list with newElement taking new currentB value
currentB = currentB.nextLink;
currentA = headA;
while(currentA != null)
{
System.out.println(currentA.data);
currentA = currentA.nextLink; //output 3->4->5->12->6->9 How!?
}
}
我最初的逻辑就是这样做: -
public static void joinLists(Node headA, Node headB)
{
Node currentA = headA;
Node currentB = headB;
while (currentB != null)
{
currentA = head;
while( currentA.nextLink != null )
{
currentA = currentA.nextLink;
}
Node newElement = currentB;
currentA.nextLink = newElement;
currentB = currentB.nextLink;
}
currentA = headA;
while(currentA != null)
{
System.out.println(currentA.data);
currentA = currentA.nextLink;
}
}
但这似乎不起作用!
但在此之前告诉我第一个代码是如何工作的?
答案 0 :(得分:1)
您将A(5)中的最后一个节点指向B中的第一个节点(12),这与您的输出完全对应。您不需要循环,因为连接是分布式的:每个节点只知道下一个节点的位置。在将B附加到A的末尾时,只有1个链接发生变化:您更改的链接。
答案 1 :(得分:0)
第一个循环将列表headB附加到列表headA的末尾。
public static Node joinLists(Node headA, Node headB)
{
if (headA == null)
{
headA = headB;
}
else
{
Node currentA = headA;
while (currentA.nextLink != null)
{
currentA = currentA.nextLink;
}
currentA.nextLink = headB;
}
Node current = headA;
while (current != null)
{
System.out.println(current.data);
current = current.nextLink;
}
return headA;
}
然后打印循环就可以了。
在你的第二个循环中你尝试了一些东西(curretnA = head;
)。
如此处所示,较少的变量将使理解更容易。 必须使用连接列表的返回值,因为headA可以为null。
答案 2 :(得分:0)
LinkedList数据结构由ValueByReference Logic的主体工作,也就是说,linkedList的每个节点都可以存储在内存位置的任何位置,我们只是通过将内存地址映射到" Node.next&#34来链接每个节点。 ;字段
在第一个逻辑代码
中 Node newElement = currentB;
currentA.nextLink = newElement;
currentB = currentB.nextLink;
直接映射指向LinkedListA中最后一个元素的headB指针,因此它类似于连接LinkedList中的每个节点。