2011-08-21 30 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);