2011-08-21 28 views
0

在不同的地点,我在Java中一直在寻找的程序做反向链接列表的顺序 (单链表,并和双向链表)。我登陆上去不同的网站,如逆转单链表?

1)HTTP://怪胎-o-pedia.blogspot.com/2007/07/how-would-you-reverse-singly-linked.html 2)http://stackoverflow.com/questions/354875/reversing-a-linked-list-in -java递归地

PointA-根据我的理解,这些程序(采取链接1)是很好的,当你正在编写链接列表类作为 程序假设我们可以访问节点类,我们不能(因为它是在链接列表中的私人内部类。)

B点 - 除此之外,该程序将永久性地反转源链表的顺序。所以当我们迭代这个 时,我们总是会以相反的顺序得到elemts。

请让我知道,如果上述两个点是正确的

于是,我就做我自己

--Reversing的单向链表

LinkedList list1 = new LinkedList(); 
    list1.add(1); 
    list1.add(2); 
    list1.add(3); 
    list1.add(4); 
    list1.add(5); 

LinkedList reverseList1 = new LinkedList(); 

int size= list1.size(); 

// below loop will revrse the order of source linked list i.e list1 

for(int i =size-1;i>=0;i--) 
{ 
reverseList1.add(size-i-1, list1.get(i)); 
} 

只是想确保,如果上述方法是正确的,因为我无法在互联网上找到这些方法,我发现它非常简单。任何地方我都可以找到类似于link1和link2的方法

张贴在https://forums.oracle.com/forums/thread.jspa?threadID=2271413&tstart=0也没有得到正确的答案。

回答

1

这看起来好像会工作的很好。但是,对于add方法,不需要第一个参数 - 添加已添加到最后(也可以使用addLast,这是相同的)。

此外,使用get(i)多次是不高效。我会遍历第一个列表(用foreach或迭代器 - ,对于每个元素调用addFirst

或者,使用Collections.reverse,因为Panzerschreck的建议,这确实是最好的方式IMO

1

你试过使用这些吗?

Collections.sort(list, Collections.reverseOrder(cmp)); 
or 
Collections.reverse(list);