已知一个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) { }
}
最后的结果:"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) { }
}
建个string 类型数组
遍历list 的所有 值。 如果 string [] 里没有 就在string 里放一个
如果有了 就把 list的这个值删掉
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(){
}
}
zhe me zuo bu neng ma?
bu neng da han zi,hehe
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;
}
}
}
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;
}
}
}
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();
}
}
}
for(){
}
}
这就涉及到查找算法的效率问题,从前往后扫描,对于每个元素,查找在集合中和他相同的
元素的位置,并记录下来,然后删除相同的元素,不知道这样行不行?
元素的位置,并记录下来,然后删除相同的元素"hmsuccess 大兄弟,可以把你想法用代码实现一下吗?记录位置我不会呢
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();
}
}
}
在LinkedList里删除重复元素,还是先排序快吧,对吗?
谢谢各位兄弟了!!!
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 --;
}
}
}
}
{
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);
}
}
}
}