zoukankan      html  css  js  c++  java
  • 删除排序链表中的重复元素 II

    此博客链接:https://www.cnblogs.com/ping2yingshi/p/12682141.html

    删除排序链表中的重复元素 II(103)

    此博客链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-list-ii/

    给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。

    示例 1:

    输入: 1->2->3->3->4->4->5
    输出: 1->2->5
    示例 2:

    输入: 1->1->1->2->3
    输出: 2->3

    题解:

              说明:此题和上面一题不同之处在于,上一道题删除重复数字,但是保留一个数字,此题是只要是重复的都删除,不保留。

              思路:使用两个指针,一个指针判断当前值和后面的值是否相等,相等就指向下一个数。排除相同数字。另外一个指针指向第一个指针,把不相同的数字加入到链表中。

    过程:一开始真是怎么都不对,报空指针异常,真是找了半天错误,才发现原来是判断前一个数和后一个是否相等时的while中,需要先判断q指针的next是否为空。

    错误代码如下:

    class Solution {
        public ListNode deleteDuplicates(ListNode head) {
            if(head==null||head.next==null)
              return head;
            ListNode result=new ListNode(0);
            result.next=head;
            ListNode p=result;//记录指针
            ListNode q=result.next;//判断指针
            while(q!=null)
            {
               if(q.next!=null&&q.val==q.next.val)
               {
               while(q.val==q.next.val&&q.next!=null)
                {
                    q=q.next;
                }
                
                p.next=q.next;
                q=q.next;
               }
                else
                {
                   p=p.next;
                   q=q.next;
                }
            }
            return result.next;
        }
    }

    正确代码:

    class Solution {
        public ListNode deleteDuplicates(ListNode head) {
            if(head==null||head.next==null)
              return head;
            ListNode result=new ListNode(0);
            result.next=head;
            ListNode p=result;//记录指针
            ListNode q=result.next;//判断指针
            while(q!=null)
            {
               if(q.next!=null&&q.val==q.next.val)
               {
               while(q.next!=nullq.val==q.next.val)
                {
                    q=q.next;
                }
                
                p.next=q.next;
                q=q.next;
               }
                else
                {
                   p=p.next;
                   q=q.next;
                }
            }
            return result.next;
        }
    }
    

      

  • 相关阅读:
    按年按月分组查询
    dir listing 目录文件列表索引
    ps/sql developer 登录远程服务器
    Sql 基础问题
    数组的ES6,ES7的方法
    release中技术点的定义
    数仓面试
    项目总体分析
    spark
    dmp准备工作
  • 原文地址:https://www.cnblogs.com/ping2yingshi/p/12682141.html
Copyright © 2011-2022 走看看