读书人

100分求个在LinkedList列表里删除重复

发布时间: 2012-01-13 22:43:29 作者: rapoo

100分求个在LinkedList列表里删除重复的元素的函数
已知一个LinkedList列表里有重复元素:"N" "AA" "N" "C" "AA" "N"
最后的结果:"N" "AA" "C"
要删除其中重复的元素.不要用Set,不要用toArray方法.
用跌代器实现(Iterator\listIterator等等都可以)

我实在是想不出来了,求个算法
请CSDN的朋友指点指点.

Java code
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) {    }}





[解决办法]
如果数据量不大的话,可以用个笨方法。
建个string 类型数组
遍历list 的所有 值。 如果 string [] 里没有 就在string 里放一个
如果有了 就把 list的这个值删掉
[解决办法]
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;
}
}
[解决办法]
for(){
for(){
}
}
zhe me zuo bu neng ma?
bu neng da han zi,hehe
[解决办法]
实现是实现了 感觉效率可能不太好 iterator只能向后迭代

Java code
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();            }        }    }
[解决办法]
没办法,不让排序很扯淡。Set就是利用了排序才快的。

[解决办法]
自己写一个Hash表算了

老实说这个要求很无理

自己都用了List,还不给别人用Set

[解决办法]
是的,即使使用二分查找算法,也得先排序
[解决办法]
Java code
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 --;
}
}
}
}


[解决办法]
做一个hashmap,判断是否有重复的key,如果有同一个key,在该条linkedList中删除该记录,否则写入hashmap中的key,然后下一条
[解决办法]
学习学习好好学习天天向下

读书人网 >J2SE开发

热点推荐