删除有序链表中重复出现的元素

删除有序链表中重复出现的元素
leetcode83

解题思路:

  1. Map记录每个元素出现的次数
public class Solution {
    /**
     * 
     * @param head ListNode类 
     * @return ListNode类
     */
    public ListNode deleteDuplicates (ListNode head) {
        // write code here
        // 新建数组链表
        ArrayList<Integer>res=new ArrayList<>();
        // Map记录元素出现的次数
        Map<Integer,Integer>map = new HashMap<>();
        // 当前节点
        ListNode curr = head;
        while(curr!=null){
        // 判断map中是否已存在当前元素的键
            if(map.containsKey(curr.val)){
            // 如果已存在,则+1
                map.put(curr.val,map.get(curr.val)+1);
            }else{
           // 如果不存在,则添加至map中
                map.put(curr.val,1);
            }
               curr =curr.next;
        }
        //遍历map,将key为1的元素添加至新链表中
        for(Object obj:map.keySet()){
            if((int)map.get(obj)==1){
                res.add((int)obj);
            }
        }
        int i=0;
        ListNode first = new ListNode(0);
        ListNode tt=first;
        Collections.sort(res);
        while(i<res.size()){
            ListNode temp=new ListNode((int)res.get(i));
            tt.next=temp;
            tt=temp;
            i++;
        }
        return first.next;
    }
}

2. 双指针

  1. 当前节点curr和下一个节点值相等时,执行while循环找到下一个不相等的节点,给prev
  2. 当前节点curr和下一个节点不相等时,prev和curr都移动遍历
prev = ListNode(0)
curr  = head
while head and head.next:
	if head.val == head.next.val:
		head =head.next
		while head.next and head.val == head.next.val:
			head = head.next
	 	prev.next =head.next
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值