扭转单一链接列表?

时间:2011-08-21 12:37:40

标签: collections

在不同的网站上,我一直在寻找java中反转订单的程序 链表(单链表和双链表)。我登陆了不同的网站,如

1)http://geek-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-recursively

PointA-根据我的理解,当您将链接列表编写为时,这些程序(参见链接1)是很好的 程序假设我们可以访问我们不能访问的Node类(因为它是Linked List中的私有内部类。)

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

如果上述两点都正确,请告诉我

所以我试着自己动手

- 撤销单一链接列表

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,但没有得到正确答案。

2 个答案:

答案 0 :(得分:1)

您是否尝试过使用其中任何一种?

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

答案 1 :(得分:1)

这似乎可以正常工作。但是,add方法不需要第一个参数 - 最后添加已插入(并且您也可以使用相同的addLast

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

或者,像panzerschreck建议的那样使用Collections.reverse,这确实是IMO的最佳方式。