这篇文章讲述的是数据结构部分的线性表的去重的java实现,如有错误或者不当之处,还望各位大神批评指正。
问题描述
试写一高校算法,删除表中所有元素相同的多余元素(使得表中的所有元素都不重复)
算法分析
- 遍历整个链表,使用一个数组来保存第一次遍历的元素,若元素重复则删除,否则继续
- 时间复杂度O(n*n) , 空间复杂度O(n)
代码实现
- 注:链表的实现请移步https://blog.csdn.net/u013634252/article/details/81230093,这里不再赘述
- 核心代码
/**
* @explain DeDuplicat方法: 链表去重
* @param list 要去重的链表
* @throws
* @author 叶清逸
* @date 2018年7月27日 下午11:08:02
*/
public LinkList deDuplicat(){
/*创建辅助链表*/
LinkList L2 = new LinkList() ;
L2.init();
/*初始化遍历指针*/
Element p = head.next ;
/*遍历整个链表*/
for(int i=1 ; i<=LENGTH ;i++){
/*获取指针所指元素*/
int elem = (int)p.data ;
/*若元素已存在则跳过,否则放入*/
if(!isExist(L2,elem)){
L2.put(elem);
}
p = p.next ;
}
return L2 ;
}
/**
* @explain isExist方法: 判断表中是否有元素elem
* @param elem
* @return boolean 若为true则表示有元素elem,若为false则表示没有元素elem
* @throws
* @author 叶清逸
* @date 2018年7月27日 下午11:16:05
*/
public boolean isExist(LinkList list , int elem) {
boolean flag = false ;
/*初始化遍历指针*/
Element p = list.head.next ;
/*遍历整个链表*/
for(int i=1 ; i<=list.LENGTH ; i++){
if(p.data.equals(elem)){
flag = true ;
break ;
}
p = p.next ;
}
return flag ;
}
- 测试代码
public static void main(String[] args) {
/*初始化表并放入数据*/
LinkList L = new LinkList() ;
L.init();
L.put(6);
L.put(7);
L.put(4);
L.put(3);
L.put(4);
L.put(6);
L.put(5);
L.put(6);
System.out.println(L);
System.out.println(L.deDuplicat());
}
样例输出
LinkList:[6,7,4,3,4,6,5,6]
LinkList:[6,7,4,3,5]