0

我偶然发现了一个奇怪的问题,即在 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;
4

2 回答 2

0
Node newcurrent = myList3.head;
....
if (newcurrent == null)     
    //the problem is with this code                                             
    newcurrent = newNode;                           

不知道为什么你有两个列表,但上面的最后一行只是分配给局部变量。应该改为如下?

myList3.head = newNode
于 2013-01-10T21:53:38.603 回答
0

我认为你有点过于复杂了。列表中的链接已经存在。您只需要链接myList3.tailmyList1.head,无需循环添加每个节点。由于您看起来不像在存储 a 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);
    }
}

进一步说明,我发现尝试跟踪诸如currentcurrent11newcurrent等名称是很痛苦的。它们对我的大脑意味着几乎相同的东西。如果您像我一样,更具描述性的命名可能会帮助您跟踪变量在此处的用途。

于 2013-01-10T22:17:50.237 回答