2011-04-26 111 views
1

這是我有:Java - 將一個節點添加到列表的末尾?

public class Node{ 
    Object data; 
    Node next; 

    Node(Object data, Node next){ 
     this.data = data; 
     this.next = next; 
    } 

    public Object getData(){ 
     return data; 
    } 

    public void setData (Object data){ 
     this.data = data; 
    } 

    public Node getNext(){ 
     return next; 
    } 

    public void setNext(Node next){ 
     this.next = next; 
    } 
} 

如何編寫代碼來在列表的末尾添加一個節點?

所以,如果我有

head -> [1] -> [2] -> null 

如何去

head -> [1] -> [2] -> [3] -> null 

其實......我甚至不知道我是否要添加到末尾。我認爲這是有效的添加,然後排序?不確定。

謝謝!

+0

你能澄清爲何要排序呢?該列表應該由數據排序?另外,爲什麼需要添加到最後? (我知道,我知道,這是任意的,但我只是想了解整個問題) – 2011-04-26 13:25:05

回答

5
public void addToEnd(Object data){ 
    Node temp = this; 
    while(temp.next!=null)temp=temp.next; 
    temp.next=new Node(data, null); 
} 
+1

你是不是指'temp.next = new ...'? – 2011-04-26 13:26:05

+0

循環後'temp.next'不會總是爲空嗎? – 2011-04-26 13:30:52

+0

@ The Scrum Meister,對不起。我的錯。現在修好了 – 2011-04-26 13:31:45

1

要添加到最後,您必須走到列表的末尾(即next = null)並在其中添加新節點。

在現實世界中,您可以使用ArrayList來完成此任務,而不必擔心鏈接列表或手動結構。

1

在添加節點的方法中,編寫一個從頭開始的while循環,並查看「下一個節點」是否爲空。如果不是,則進入「下一個節點」並重復。

一旦你在沒有指向任何東西的節點上,添加節點就像重新指定要添加的節點的空引用一樣簡單。從頭部

2

開始:

Node currentNode = headNode; 
while (node.getNext() != null) { 
    currentNode = currentNode.getNext(); 
} 

currentNode.setNext(newNodeForInsertion); 

一種更快的方式是存儲列表的最後一個節點的地方,這樣你就不必去通過整個列表。

2

遞歸瀏覽每個節點,直到達到最後。

public void navigate(Node insertNode) 
{ 
    if(next == null) 
     next = insertNode; 
    else 
     next.navigate(insertNode); 
} 
4

這是一個鏈表。您必須

A)從頭開始遍歷所有節點,找到最後一個節點,然後添加一個節點。

B)跟蹤的尾巴,增加了尾,然後更新尾到新的最後一個節點。

0
Node n = head; 
while(n.getNext() != null){ 
    n = n.getNext(); 
} 
n.setNext(nodeToAdd); 

這是沒有排序,其中,如果你需要它有序,我不能從你的問題告訴我們。這就打開了另一堆蠕蟲,比如你想排序什麼,如果你有一個類型爲Object的鏈表,那麼排序就沒有任何意義。

1

遞歸解決方案:

public void addToEnd(Object data){ 
    if (next==null) 
     next = new Node(data, null); 
    else 
     next.addToEnd(data); 
}