在不使用循环的情况下获得完整的链表?



LinkedListA = 3->4->5

链接列表B = 12->6->9

我只是试图在第一个链接列表A的末尾添加linkedlistB。 我无法弄清楚为什么最后一个while循环能够打印 完整的链接列表 A 以及从链接列表 B 添加的所有节点!

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;        
}
}

但这似乎行不通!

但在此之前,告诉我第一个代码似乎是如何工作的?

你让 A 中的最后一个节点(5(指向 B 中的第一个节点(12(,它与你的输出完全对应。 你不需要循环,因为连接是分布式的:每个节点只知道下一个节点在哪里。 在将 B 附加到 A 的末尾时,只有 1 个链接会发生变化:您更改的链接。

第一个循环将列表头 B 附加到列表头 A 的末尾。

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 可以为空。

LinkedList 数据结构由 ValueByReference Logic 的主体工作,也就是说,linkedList 的每个节点都可以存储在内存位置的任何位置,我们只是通过将内存地址映射到 "Node.next" 字段来链接每个节点

在第一逻辑代码中

Node newElement = currentB;       
currentA.nextLink = newElement;        
currentB = currentB.nextLink;

你直接将 headB 指针映射到 LinkedListA 中的最后一个元素,所以它类似于连接 LinkedList 中的每个节点。

相关内容

  • 没有找到相关文章

最新更新