LintCode:删除排序链表中的重复数字 II

描述:

给定一个排序链表,删除所有重复的元素只留下原链表中没有重复的元素。

样例

给出 1->2->3->3->4->4->5->null,返回 1->2->5->null
给出 1->1->1->2->3->null,返回 2->3->null

思路

  • 由于链表的开头可能有重复项,而最终还需要返回链表的头指针,所以需要定义新链表,设置一个初始节点。
  • 由于需要比较前后值,判定重复,所以需要一个前驱指针,采用慢指针的方式实现,慢指针始终比现节点慢一步
    -遍历整个链表,当前的值不等于前驱节点的值和后继节点的值,则将该值加入新链表中。
    public static ListNode deleteDuplicates(ListNode head) {
        ListNode dump = head;
        ListNode newHead = new ListNode(0);
        ListNode result = newHead;
        if (head == null || head.next == null) {
            return head;
        }
        while (head != null && head.next != null) {
            if (head.val != head.next.val && (head == dump || head.val != dump.val)) {
                newHead.next = new ListNode(head.val);
                newHead = newHead.next;
            }
            if (dump != head) {
                dump = dump.next;
            }
            head = head.next;
        }
        if (head.next==null&&head.val!=dump.val){
            newHead.next=new ListNode(head.val);
        }
        return result.next;
    }
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容