2013-01-10 45 views
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的列表通常會被添加。

其他碼我嘗試:

newcurrent.setLink(newNode); 

newNode = newcurrent; 
newcurrent = newNode; 

newNode.setLink(newcurrent); 
newcurrent.setLink(newNode); 

newNode.link = newcurrent; 
newcurrent.link = newNode; 
+0

從您的代碼中刪除空白行。 – Juvanis

+0

@DelShekasteh我做過。 – kamaci

+0

如果您正確縮進代碼,就會更容易跟蹤,維護和調試。 – iamnotmaynard

回答

0

我覺得你太過於複雜了。列表中的鏈接已經存在。您只需要鏈接myList3.tailmyList1.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); 
    } 
} 

一所進一步指出,我覺得很痛苦,試圖跟蹤的名字一樣currentcurrent11newcurrent等,他們都表示幾乎同樣的事情,我的大腦。如果你像我一樣,更具描述性的命名可能會幫助你跟蹤你的變量在這裏的意圖。

+0

謝謝你,現在它可以將它添加到列表中,而myList3是空的,但現在當myList3中有元素時,它會進入一個數據庫循環 –

+0

好吧,兩件事情之一正在發生。也許,你創建了一個[循環列表](http://upload.wikimedia.org/wikipedia/commons/thumb/c/c8/Ouroboros-simple.svg/220px-Ouroboros-simple.svg.png),或者你誤解了代碼。我的答案中的代碼替換了問題中的所有代碼,而不僅僅是if/else塊。 – femtoRgon

+0

我替換了所有的東西,但不是while循環,我應該替換它,但我需要遍歷myList1的所有內容,以便將所有內容複製到myList3 –

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

不確定爲什麼你有兩個列表,但上面的最後一行只是分配給局部變量。它應該如下代替嗎?

myList3.head = newNode 
+0

謝謝你 但它也沒有工作,問題是,當第三個列表是空的,但如果它至少有一個元素在裏面,第一個鏈表順利添加。 –

+0

那麼以上是絕對錯誤的。 –

+0

什麼是兩個列表myList1和myList3? –

相關問題