2016-12-18 68 views
-4

請問您能否幫助解決從已排序的鏈接列表中刪除重複項意味着完全刪除並只給出唯一值。數據結構和算法java

1-> 2> 4-> null應該是1-> 4;

2-> 2-> null應該爲null;

1-> 2-> 3-> 3-> 6應該是1-> 2-> 6

它應當滿足所有上述測試案例

+0

問題是? –

+0

到目前爲止你試過了什麼? – GurV

+0

當你不給我們你的鏈表實現時,當然不讓我們爲你編寫代碼,所以我們只會用一般的術語來指導你。尼斯。 –

回答

1

這個代碼將滿足所有的條件你在你的問題已經指定,我已經使用java.util.LinkedList中實現代碼:

import java.util.ArrayList; 
import java.util.Collections; 
import java.util.LinkedList; 

public class Employee { 

public static void main(String[] args) { 


    LinkedList<Integer> ll=new LinkedList<>(); 
    ArrayList<Integer> al=new ArrayList<>(); 

    // Populating the LinkedList with sample Input 
    ll.add(1); 
    ll.add(2); 
    ll.add(3); 
    ll.add(3); 
    ll.add(3); 
    ll.add(3); 
    ll.add(6); 
    ll.add(null); 


    //Searching the LinkedList for finding duplicates and then removing them 

    for (int i = 0; i < ll.size(); i++) { 

     for (int j = i+1; j <ll.size(); j++) { 

      if(ll.get(i).equals(ll.get(j))) 
      { 
       al.add(ll.get(j));  
      } 

     } 

    } 

    ll.removeAll(al); 


    // Printing the LinkedList after removing duplicates 
    for (Integer integer : ll) { 

     System.out.println(integer); 

    } 

    } 

} 

我的代碼以前的版本也不會因此在這一代碼相同數量的3個OCCURENCES工作ArrayList中會在找到所有元素出現後,存儲多次出現的元素不止一次地振鈴,然後使用LinkedList.removeAll()方法從LinkedList中刪除所有這些重複項。

+0

如果有多於2個相同值的序列,則這不起作用。此外,表演是O(n2)。這可以在O(n)中完成。 –

+0

Thank You @AbbéRésina幫助我找到我以前的代碼中的一個錯誤,現在我已經修復了它,並且它適用於元素的許多發生。性能明智,我一直無法使它爲O(n)工作,我真的很後悔,但是這個代碼可以用於學習新手的目的,如果你能告訴我一些手段使這個代碼在O(n)工作。 –

+0

這似乎很好地工作。我有一個預感,原始海報的老師並不記得你可以使用一個輔助'ArrayList'來解決這個任務,也不需要互聯網上的某個人爲他或她做這件事。但是OP可以最好地分辨出我是否正確。 –