2012-08-13 64 views
0

我遇到過類似的問題,如何知道哪個節點在鏈表中被刪除。 例如:有一個鏈接列表,其中包含幾個節點和鏈接列表傳遞給一個 函數,它將刪除一個任意節點並將返回列表..有什麼辦法讓 知道哪個節點被刪除。最好的方法來得知哪個節點在鏈表中被刪除?

根據我的觀點,在傳遞鏈表之前,我們需要維護一個數組,它將全部列出每個節點的地址,並在刪除之後我們需要遍歷並找出哪個節點被刪除。

什麼是最好的方法。

例:

public class GetDeletedNode{ 
    public static void main(String args[]){ 
     LinkedList<String> ll = new LinkedList<String>(); 
     ll.add("a"); 
     ll.add("b"); 
     ll.add("c"); 
     ll.add("d"); 

     ll = deleteArbitaryNode(ll); 

     //write code to get know which node got deleted. 
     // 
     //code goes here 


     for(String str:ll){ 
      System.out.println(str); 
     } 
    } 

    private static LinkedList<String> deleteArbitaryNode(LinkedList<String> ll) {  
     //delete arbitary node 
     Random random = new Random(); 
     ll.remove((int)((long)3*random.nextDouble()+1)); 
     return ll;  
    } 
} 
+3

你爲什麼不直接從方法中返回刪除的項目? – 2012-08-13 07:37:26

+0

@JigarJoshi:爲什麼這不是一個答案? – Cratylus 2012-08-13 07:48:23

+0

問題的訣竅就是這樣,任意的刪除方法不會改變,但我們需要在主要方法中弄清楚。根據我的視圖在傳遞鏈表之前,我們需要維護一個數組,列表中每個節點的地址和刪除後,我們需要遍歷並找出哪個節點被刪除。我需要更好的答案? – Bidesi 2012-08-13 08:30:03

回答

0

呼叫到 '公共e取下(INT索引)' 提供取出物體。

所以......取代你這樣的代碼,返回拆下來的主叫方的節點:

public class GetDeletedNode{ 
    public static void main(String args[]){ 
     LinkedList<String> ll = new LinkedList<String>(); 
     ll.add("a"); 
     ll.add("b"); 
     ll.add("c"); 
     ll.add("d"); 

     // removes the random node and then returns it 

     String removeObject = deleteArbitaryNode(ll); 

     for(String str:ll){ 
      System.out.println(str); 
     } 
    } 

    private static T deleteArbitaryNode(LinkedList<T> ll) {  
     //delete arbitary node 
     Random random = new Random(); 
     return ll.remove((int)((long)3*random.nextDouble()+1));  
    } 
} 

您可能還需要重新工作,你的隨機節點選擇器的東西,使用大小()在列表ans然後它可以用於任何大小列表。

+0

感謝您的答案,但問題的訣竅是,我們不應該返回刪除的節點或索引..但我們必須弄清楚哪一個被刪除..請通過問題詳細..不是代碼(這是爲了僅供參考) – Bidesi 2012-08-13 08:25:53