LeetCode刷题:面试题 02.01. 移除重复节点

题目:LeetCode刷题:面试题 02.01. 移除重复节点_第1张图片

是否独立完成:算是,但是使用自己的办法时间复杂度会超标

解题思路:

1.双循环嵌套,定义快慢节点,双层嵌套循环,如果值一样则剔除,但是时间复杂度为O(n²)会超标

2.哈希表,利用set接口的特点,不能存储重复的值

 解题代码:

class Solution {
    public ListNode removeDuplicateNodes(ListNode head) {
        if(head == null ){return null;}//判断链表是否为空
   
    Set box = new HashSet();
      box.add(head.val);//将头结点的值存入哈希表中

     ListNode pre = head;//创建一个节点指向头结点

    while(pre.next!=null){//不能pre!=null,因为下面还会创建节点指向pre.next,如果pre!=null会报空指针异常

        ListNode cur = pre.next;//在循环内部定义快指针每循环一次,cur可以随着pre的变化而变化(个人理解不一定正确)
      
        if(box.add(cur.val)){//如果set添加了pre后面节点的值那么证明这个点不是重复的
            
            pre=pre.next;//则移动pre往后一格
           
        }else{
             pre.next=cur.next;//如果没有添加证明这个点是添加过的,则跳过这个点
          
        }
      
    }
    
    return head;
}
}

你可能感兴趣的:(leetcode,算法,职场和发展)