链表--如何从链表中删除重复数据

方法一

思路:遍历链表,将链表中的数据存储到HashTable中,若当前遍历的数据在HashTable中存在,说明这个数据重复,可以将这个数据删除掉。

代码实现

public void deleteRepeat(Node head){
        Hashtable<Integer,Integer> hashTable = new Hashtable<Integer,Integer>();
        Node temp = head;
        Node preNode = null;
        while(temp != null){
            if(hashTable.containsKey(temp.data)){
                preNode.next = temp.next;
            } else {
                hashTable.put(temp.data,1);
                preNode = temp;
            }
            temp = temp.next;
        }
    }

优点:时间复杂度较低。
缺点:空间复杂度高,要申请额外的空间。


方法二

思路:对链表进行双重循环遍历,外层循环正常遍历链表,若当前遍历到的结点为curNode,内层循环从curNode.next开始遍历,若碰到与curNode结点的值相同的结点,删除掉这个重复的结点。

代码实现

public void deleteRepeat(Node head){
        Node temp = head;
        while(temp != null){
            Node insideNode = temp;
            while(insideNode.next != null){
                if(temp.data == insideNode.next.data){
                    insideNode.next = insideNode.next.next;
                } else {
                    insideNode = insideNode.next;
                }
            }
            temp = temp.next;
        }
    }

优点:空间复杂度较低,不需要申请额外的空间。
缺点:时间复杂度较高。

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yangruxi/article/details/80316326
个人分类: 算法与数据结构
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭