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

题目地址:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-list-ii/

题目:

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

示例 1:

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

试题分析:

该题核心的思路是扫描到节点后内部嵌套一个循环继续往后遍历,因为链表是有序的,所以遍历到节点值不相等即可停止修改链表连接,一次性将中间重复的元素删除就完成了重复元素的删除,整个的时间复杂度为O(n),虽然在外循环内部嵌套了一个循环,但是因为链表是有序的,内部不会出现再次重复循环。因为可能会对头节点有删除操作,所以新建了空头节点,并记录删除节点前置指针用于删除重复节点使用。

代码:

public ListNode deleteDuplicates(ListNode head) {
        ListNode newHead = new ListNode(-1);
        newHead.next = head;
        ListNode pre = newHead;
        if(head==null || head.next==null){
            return head;
        }

        ListNode cur = head;
        while(cur!=null){
            boolean duplicate = false;

            while(cur.next!=null && cur.val==cur.next.val) {
                //对重复数字进行循环删除
                duplicate = true;
                cur = cur.next;
            }
            //删除最后一个重复节点
            if(duplicate){
                pre.next = cur.next;
            }else {
                pre.next = cur;
                pre = cur;
            }
            cur = cur.next;
        }
        return newHead.next;
    }

源码路径:com.monkey01.linkedlist.RemoveDuplicatesFromSortedListII_82

配套测试代码路径:test目录com.monkey01.linkedlist.RemoveDuplicatesFromSortedListII_82Test

https://github.com/feiweiwei/LeetCode4Java.git

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容