[程序员代码面试指南]链表问题-删除无序链表中重复出现的节点

Posted coding-gaga

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[程序员代码面试指南]链表问题-删除无序链表中重复出现的节点相关的知识,希望对你有一定的参考价值。

题意

如题

题解

使用HashSet。
时间复杂度O(n),额外空间复杂度O(n)。

todo

使用选择排序也可以做。

代码

import java.util.HashSet;

public class Main 
    public static void main(String args[]) 
        //测试
        Node n1=new Node(2);
        Node n2=new Node(2);
        Node n3=new Node(3);
        n1.next=n2;
        n2.next=n3;
        Node head=n1;
        
        rmRepeat(head);
        
        //测试
        Node pNode=head;
        while(pNode!=null) 
            System.out.println(pNode.val);
            pNode=pNode.next;
        
    
    
    public static void rmRepeat(Node head) 
        if(head==null) 
            return;
        
        HashSet<Integer> hashset=new HashSet();
        hashset.add(head.val);
        
        Node pre=head;
        Node cur=pre.next;
        while(cur!=null) 
            if(hashset.contains(cur.val)) 
                pre.next=cur.next;
            
            else 
                hashset.add(cur.val);
                pre=cur;
            
            cur=cur.next;
        
    

以上是关于[程序员代码面试指南]链表问题-删除无序链表中重复出现的节点的主要内容,如果未能解决你的问题,请参考以下文章

[程序员代码面试指南]链表问题-单链表的选择排序(选择排序)

剑指Offer-代码的完整性面试题18.2:删除链表中的重复节点

链表常见的题型(java实现)

[程序员代码面试指南]链表问题-复制含有随机指针节点的链表(方法二待做)

面试题:删除链表中的重复节点

链表面试-删除链表中重复的节点(常考题)