2011-04-26 91 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); 
}