zoukankan      html  css  js  c++  java
  • 删除所有含有重复数字的节点

    /**
     * 给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。
     *
     * 示例 1:
     *
     * 输入: 1->2->3->3->4->4->5
     * 输出: 1->2->5
     * 示例 2:
     *
     * 输入: 1->1->1->2->3
     * 输出: 2->3
     */

    代码如下:

     public ListNode deleteDuplicates(ListNode head) {
            if(head == null || head.next == null) return head;
            //虚拟头结点
            ListNode dummy = new ListNode(-1);
            //标记结点
            ListNode sign = dummy;
            dummy.next = head;
            //当前结点
            ListNode cur = head;
            while(cur!=null){
                ListNode np = cur.next;
                //count用来计数,表示相邻链表是否相等,相等加1,
                //
                int count = 0;
                while(np!=null){
                    if(np.val == cur.val){
                        np = np.next;
                        count++;
                    }else{
                        break;
                    }
                }
                //判断第一个结点是否重复
                if(count>=1 && cur == head){
                    sign.next = np;
                    dummy = sign;
                    cur = np;
                }
                //第一个结点不重复,后面结点重复
                else if(count>=1){
                    sign.next = np;
                    cur = np;
                }
                //当前遍历没有重复结点
                else{
                    sign = sign.next;
                    cur = cur.next;
                }
    
            }
            return dummy.next;
        }

    以上的注释可能解释的不太清楚,建议读者看着代码画图,这样其实更好理解这道题,其实链表这块的题只要你画图都是很容易解出来的。

  • 相关阅读:
    数据汇总计算和分析的反思
    排名算法计算
    仿Spring读取配置文件实现方案
    xml 配置文件规范 校验
    批量插入数据(基于Mybatis的实现-Oracle)
    shallow copy 和 deep copy 的示例
    引用对象的使用和易产生bug的示例
    codis安装手册
    Redis安装手册
    map和list遍历基础
  • 原文地址:https://www.cnblogs.com/du001011/p/10668187.html
Copyright © 2011-2022 走看看