zoukankan      html  css  js  c++  java
  • 82. Remove Duplicates from Sorted List II

    Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list.

    Example 1:

    Input: 1->2->3->3->4->4->5
    Output: 1->2->5
    

    Example 2:

    Input: 1->1->1->2->3
    Output: 2->3

    这里的策略和83. Remove Duplicates from Sorted List 不同。

    因为这里需要考虑3个以上的连续的重复数字。

    问题可以简化为:

    1.找到重复数字

    2.移除重复数字

    比较麻烦的是,如果第一个数字就是重复的,那么需要重置head。

    比如1->1->2->2这种情况,先移除1,head需要指向2;再移除2,head指向null。

    处理方法是引入一个新的head,并且这个head只需要不和第一个数字重复就好。

      public ListNode DeleteDuplicates(ListNode head)
            {
                if (head == null)
                {
                    return null;
                }
                ListNode myHead = new ListNode(head.val + 1);
                myHead.next = head;
                ListNode node1 = myHead;
                ListNode node2 = node1.next;
                ListNode node1Prev = myHead;
                while (node2 != null)
                {
                    if (node1.val == node2.val)
                    {
                        Remove(node1Prev, node1);
                        node1 = node1Prev.next;
                        node2 = node1?.next;
                    }
                    else
                    {
                        node1Prev = node1;
                        node1 = node2;
                        node2 = node1.next;
                    }
                }
    
                return myHead.next;
            }
    
            private static void Remove(ListNode nodePrev, ListNode node)
            {
                int val = node.val;
                while (node != null && node.val == val)
                {
                    node = node.next;
                }
    
                nodePrev.next = node;
            }
  • 相关阅读:
    ES6新特性
    浏览器兼容问题
    跨域
    箭头函数与普通函数的区别
    单页面应用
    vue试题
    Git 常用命令
    【分享代码】一个笨办法获取容器的剩余内存
    【笔记】thanos receiver的router模式
    【分享】让prometheus支持PUSH模式,可以使用remote write协议推送数据
  • 原文地址:https://www.cnblogs.com/chucklu/p/10500725.html
Copyright © 2011-2022 走看看