数据结构_线性表的应用_线性表的去重的java实现

这篇文章讲述的是数据结构部分的线性表的去重的java实现,如有错误或者不当之处,还望各位大神批评指正。

问题描述

试写一高校算法,删除表中所有元素相同的多余元素(使得表中的所有元素都不重复)

算法分析

  • 遍历整个链表,使用一个数组来保存第一次遍历的元素,若元素重复则删除,否则继续
  • 时间复杂度O(n*n) , 空间复杂度O(n)

代码实现

/**
         * @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]

猜你喜欢

转载自blog.csdn.net/u013634252/article/details/81255859