算法

有序链表删除重复节点

2020-10-21  本文已影响0人  小鱼嘻嘻

问题1

删除排序链表中重复元素,例如l1 为 1->2->2->3->3->4,删除之后为,1->2->3->4,简单来说就是重复元素保留一个。

原理

代码

class Solution {
    public ListNode deleteDuplicates(ListNode head) {
        if(head==null||head.next==null){
            return head;
        }
        ListNode l1 = head;
        while(l1!=null){
            ListNode cur = l1;
            ListNode next = l1.next;
            while(next!=null&&next.val==cur.val){
                next = next.next;
            }
            cur.next = next;
            l1 = l1.next;
        }
        return head;
    }
}

注意事项

问题2

给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。例如l1 为 1->2->2->3->3->4,删除之后为,1->4,简单来说就是重复元素都不保留。

原理

代码

class Solution {
    public ListNode deleteDuplicates(ListNode head) {
        if(head==null){
            return head;
        }
        Map<Integer,Integer> map = new HashMap<>();
        ListNode l1 = head;
        while(l1!=null){
            if(map.get(l1.val)!=null){
                map.put(l1.val,map.get(l1.val)+1);
            }else{
                 map.put(l1.val,1);
            }
            l1 = l1.next;
        }
        ListNode newHead = new ListNode(-1);
        ListNode run = newHead;
        while(head!=null){
            if(map.get(head.val)==1){
                run.next = head;
                run = run.next;
            }
            head = head.next;
        }
        run.next = null;
        return newHead.next;
    }
}

注意事项

上一篇 下一篇

猜你喜欢

热点阅读