在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
解题方法:
1.遍历链表,将重复节点加入HashSet中,之后根据HashSet是否包含重复值进行去重,先删除根节点,再删除中间节点;
时间复杂度O(n),空间复杂度再好的情况下为O(1),最坏的情况下为O(n/2).
2.增加一个头节点的辅助节点,就不需要hashset了,cur的作用是去除重复的节点,当循环退出时,cur指向的还是重复节点,因此需要再向后移动一步.
时间复杂度O(n),空间复杂度O(1)

public class Solution {    public ListNode deleteDuplication(ListNode pHead)    {        if(pHead == null || pHead.next == null) return pHead;        ListNode head = new ListNode(Integer.MIN_VALUE);        head.next = pHead;    //创建辅助头节点        ListNode pre = head, cur = head.next;        while(cur != null){            if(cur.next != null && cur.next.val == cur.val){   //发现重复节点                while(cur.next != null && cur.next.val == cur.val){                    cur = cur.next;                }                 cur = cur.next;   //循环退出时cur指向的还是重复节点,需要再往后移动一步                pre.next = cur;            }else{                pre = cur;                cur = cur.next;            }        }        return head.next;    }}
©著作权归作者所有:来自51CTO博客作者wx5d3c7e0ad6c30的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. K8S v1.18.x 部署-Kubeadm方式-4:部署负载均衡
  2. K8S v1.18.x 部署-Kubeadm方式-5:部署Kubernetes HA集群
  3. K8S v1.18.x 部署-Kubeadm方式-2:部署准备
  4. 3-13(树)
  5. K8S v1.18.x 部署-Kubeadm方式-6:重置集群
  6. K8S v1.18.x 部署-Kubeadm方式-7:部署Addon-MetalLB
  7. K8S v1.18.x 部署-Kubeadm方式-3:部署工具
  8. CentOS 7部署OpenStack--准备基础环境
  9. Cisdem Duplicate Finder:快速查找和删除苹果Mac中重复文件

随机推荐

  1. 求助,关于sql带入参数的写法问题。
  2. 参数化的Insert语句,事务抛出错误
  3. linux 上安装postgresql 并配置pgadmin i
  4. 将mysql查询转换为sql server查询
  5. 待解决 WIN7下安装完sql2005后没有服务器
  6. SQL Server 批量更新字段值为ROW_NUMBER(
  7. 窥探SQL预编译内幕
  8. SQL里ROWCOUNT的使用
  9. [O]SQL SERVER下有序GUID和无序GUID作为
  10. 利用读写锁实现sqlite多线程写的问题