删除排序链表中的重复元素 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;
    }
}

  

posted @ 2020-04-11 20:50  萍2樱释  阅读(166)  评论(0编辑  收藏  举报