2012-08-31 20 views
2

是否有可能在Java中创建链表,并且能够在列表的中间(不仅仅是开始或结束)添加新链接 - 如果可能的话,无需在内存中复制粘贴列表中的大部分内容以适应新链接的输入?在Java中实现特殊的链表方法

如果是这样,请张贴您的例子!

+0

您好,欢迎计算器。你应该发布代码中的重要部分(你试过了什么?),以便人们更好地理解它,并表明你已经付出了一些努力来解决这个问题。我建议你阅读http://stackoverflow.com/faq – Th0rndike

+0

答案是肯定的。做你自己的作业。 – allingeek

回答

3

您可以使用LinkedList来执行此操作。

List<Integer> ints = new LinkedList<Integer>(); 
for (int i = 0; i <= 10; i++) 
    ints.add(i/2, i); 
System.out.println(ints); 

打印

[1, 3, 5, 7, 9, 10, 8, 6, 4, 2, 0] 

正如你可以看到它已经在列表的中间被添加条目。

+0

以及恒定/线性时间:) – vstoyanov

+0

很好听的时间。你知道如何找到实现吗?感谢您的评论! – user1639110

+0

它在你的JDK的'src.zip'中。如果你使用IDE,你可以通过' + '来查看它的源代码。 –

2

在伪代码一些链接这是一个良好的开端:

public LinkedList<E> implements List<E>{ 
    ... 

    public void add(int index, E element){ 
     Node<E> current=findNodeAt(index); 
     //add in your logic to insert this node at this location 
     //probably something like (depending on your linking) 
     element.setNext({current nodes next value}) 
     current.setnext(element);  
    } 

    private Node<E> findNodeAt(index){ 
     //iterate through list until you reach the index or end of the list 
     //then return that node 
    } 

    ... 
} 





public Node<E>{ 
    private Node<E> next; 
    ... 

    Node<E> setNext(Node<E> next){ 
     Node<E> previousNext=next; 
     this.next=next; 
     return previousNext; 
    } 

    ... 
}