2011-03-01 56 views
2

我有鏈接列表中的50個值來找到鏈接列表的中間值或節點?如何從java中的鏈接列表中找到中間值或節點?

List list = new LinkedList(); 
    for (int i = 0; i < 50; i++) { 
    list.add(String.valueOf(i)); 
} 

int size = list.size(); 
int middle = (size/2); 
System.out.println(list.get(middle).toString());... 

我得到這樣一個答案.... 但我的團隊負責人表示以另一種方式找到? 有沒有其他內置的方法在鏈表中迭代?我試過...但我不知道內置的方法來找到中間值...和 或者你可以任何一個建議另一個邏輯來找到中間值linke列表中的節點?

謝謝.......

+0

的一個問題是,如果你的列表的大小是奇數,你將無法獲得中間節點。例如:如果大小是3,你的中間節點就是1.修正它像int middle = size/2 + size%2。但我不認爲這就是你的團隊領導所指的。 – 2011-03-01 05:42:18

+0

對不起..watever你說OK ..但我的團隊負責人說吶,必須嘗試找到另一個邏輯沒有分割,modulas的大小......在那裏? – Sri 2011-03-01 06:20:54

+0

問題不清楚列表長度是否均勻時「中間」是什麼。 – Carnell 2011-03-01 08:15:30

回答

4

獲取2個引用同一個列表。

In a single loop: 
Advance the 1st list 2 nodes at a time. 
Advance the 2nd list 1 node at a time. 
Loop until the 1st loop reaches the end. 
+0

抱歉,我是否得到你?如果你不介意可以更簡單地解釋一下嗎? – Sri 2011-03-01 06:44:12

+1

你可以看到[另一個類似的問題](http://stackoverflow.com/questions/4509215/how-to-go-the-middle-of-the-singularly-linked-list-in-one-iteration)。你有我的答案的僞代碼,你應該自己實現它。 – bits 2011-03-01 08:51:47

0

也許你的團隊負責人建議你使用ArrayList而不是LinkedList。你們的做法

List<String> list = new ArrayList<String>(50); 
+0

對不起..沒有....他只想用只有鏈表的答案嗎?是嗎? – Sri 2011-03-01 06:21:52

1
List list = new LinkedList(); 
    for (int i = 0; i < 50; i++) { 
    list.add(String.valueOf(i)); 
} 

int end = list.size() - 1; 
int start = 0; 
while (start > end) { 
    start++; 
    end--; 
} 
if(start == end) //The arrays length is an odd number and you found the middle 
    return start; 
else //The arrays length is an even number and there really isn't a middle 
    //Do something else here because you have an even number