已知一个LinkedList列表里有重复元素:"N" "AA" "N" "C" "AA" "N"
最后的结果:"N" "AA" "C"
要删除其中重复的元素.不要用Set,不要用toArray方法.
用跌代器实现(Iterator\listIterator等等都可以)我实在是想不出来了,求个算法
请CSDN的朋友指点指点.import java.util.*;
public class RemoveDuplicate { public static void main(String[] args) {
LinkedList<String> dL = new LinkedList<String>();
dL.add("N");
dL.add("AA");
dL.add("N");
dL.add("C");
dL.add("AA");
dL.add("N");
removeDuplicates(dL);
System.out.println(dL);
} public static void removeDuplicates(LinkedList<String> dl) { }
}

解决方案 »

  1.   

    如果数据量不大的话,可以用个笨方法。
    建个string 类型数组
    遍历list 的所有 值。 如果 string [] 里没有  就在string 里放一个
    如果有了   就把 list的这个值删掉
      

  2.   

    import java.util.Iterator;
    import java.util.LinkedList;public class RemoveDuplicate { public static void main(String[] args) {
    LinkedList<String> dL = new LinkedList<String>();
    dL.add("N");
    dL.add("AA");
    dL.add("N");
    dL.add("C");
    dL.add("AA");
    dL.add("N");
    System.out.println(removeDuplicates(dL));
    System.out.println(dL);
    } public static LinkedList<String> removeDuplicates(LinkedList<String> dl) {
    Iterator<String> it = dl.iterator();
    LinkedList<String> result = new LinkedList<String>();
    while (it.hasNext()) {
    String s = it.next();
    if (!result.contains(s))
    result.add(s);
    }
    return result;
    }
    }
      

  3.   

    for(){
       for(){
       }
    }
    zhe me zuo bu neng ma?
    bu neng da han zi,hehe
      

  4.   

    回复:wenly0561010
    contains效率好象不高呀...每次contains都要调用indexOf,如果数据很大,可怎么办呀?
    我也写了个,是先排序的.
    我就是想用for(){ 
       for(){ 
       } 
    }呢!可是不会写呢
    package LinkedList;
    import java.util.*;
    public class RemoveDuplicate { public static void main(String[] args) {
    LinkedList<String> dL = new LinkedList<String>();
    dL.add("N");
    dL.add("AA");
    dL.add("N");
    dL.add("C");
    dL.add("AA");
    dL.add("N");
    RemoveDuplicates(dL);
    System.out.println(dL); // 最后结果:[AA, C, N]
    } public static void RemoveDuplicates(LinkedList<String> dl) {
    Collections.sort(dl);

    String s1, s2;
    Iterator <String>  it = dl.iterator(); 
    s1 = it.next();
    while(it.hasNext()) {
    s2 = it.next();
    if(s2.equals(s1))
    it.remove();
    else
    s1 = s2;
    }

    }
    }
      

  5.   

    import java.util.*;
    public class RemoveDuplicate {    public static void main(String[] args) {
            LinkedList<String> dL = new LinkedList<String>();
            dL.add("N");
            dL.add("AA");
            dL.add("N");
            dL.add("C");
            dL.add("AA");
            dL.add("N");
            Collections.sort(dL);
            RemoveDuplicates(dL);
            System.out.println(dL); // 最后结果:[AA, C, N]
        }    public static void RemoveDuplicates(LinkedList<String> dl) {
            String s1, s2;
            Iterator <String>  it = dl.iterator(); 
            s1 = it.next();
            while(it.hasNext()) {
                s2 = it.next();
                if(s2.equals(s1))
                    it.remove();
                else
                    s1 = s2;
            }
            
        }
    }
      

  6.   

    for(){ 
       for(){ 
       } 

    这么做,我想不出来呢?
    下面写的不对.我这一顿next(),指针已经到表尾了.
    链表跌代怎么能像选择法排序那样i = 0. j = i + 1
    public static void RemoveDuplicates(LinkedList<String> dl) {
    String s1, s2;
    Iterator <String>  it1 = dl.iterator(); 
    for(s1 = it1.next(); it1.hasNext(); s1 = it1.next()) {
    for(s2 = it1.next(); it1.hasNext(); s2 = it1.next()) {
    if(s2.equals(s1))
    it1.remove();
    }
    }
    }
      

  7.   

    如果非要用for(){  
       for(){  
       }  
    }
    这就涉及到查找算法的效率问题,从前往后扫描,对于每个元素,查找在集合中和他相同的
    元素的位置,并记录下来,然后删除相同的元素,不知道这样行不行?
      

  8.   

    yes152 这样不行,因为it1大小是动态变化的
      

  9.   

    "查找在集合中和他相同的 
    元素的位置,并记录下来,然后删除相同的元素"hmsuccess 大兄弟,可以把你想法用代码实现一下吗?记录位置我不会呢
      

  10.   

    实现是实现了 感觉效率可能不太好 iterator只能向后迭代    public static void RemoveDuplicates(LinkedList<String> dl) {
            String s1, s2;
            
            int count = 0;
            
            while (count < dl.size()) {
                Iterator<String> it1 = dl.iterator();
                s2 = dl.get(count);
                int i = 0;
                for (s1 = it1.next(); it1.hasNext(); s1 = it1.next()) {
                    if (i != count && s2.equals(s1)) {
                        dl.set(count, s2.concat("toBeRemoved"));
                    }
                    i++;
                }
                count++;
            }
            Iterator<String> it1 = dl.iterator();
            while (it1.hasNext()) {
                if (it1.next().endsWith("toBeRemoved")) {
                    it1.remove();
                    it1 = dl.iterator();
                }
            }
        }
      

  11.   

    没办法,不让排序很扯淡。Set就是利用了排序才快的。
      

  12.   

    自己写一个Hash表算了老实说这个要求很无理自己都用了List,还不给别人用Set
      

  13.   

    我初学链表呀!!很多都不知道...
    在LinkedList里删除重复元素,还是先排序快吧,对吗?
    谢谢各位兄弟了!!!
      

  14.   

    public static void removeDuplicates(LinkedList<String> dl) {
    int len = dl.size();
    for (int i = 0; i < len; i++) {
    String item = dl.get(i);
    for (int j = i+1; j < len; j++) {
    if(item.equals(dl.get(j))){
    dl.remove(j);
    len --;
    }
    }
    }
    }
      

  15.   

    做一个hashmap,判断是否有重复的key,如果有同一个key,在该条linkedList中删除该记录,否则写入hashmap中的key,然后下一条
      

  16.   

    public static void removeDuplicates(LinkedList<String> dl) 
        {
         String str;
         for(int i=0;i<dl.size();i++){
         str = dl.get(i);
         for(int j=i+1;j<dl.size();j++){
         if(str.equals(dl.get(j))){
         dl.remove(j);
         }
         }
         }
        }