题目:删除链表中重复的结点 题目描述 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5 自己的解题思路,微low,但是还是要写一下: 解题思路:可以借助一个Map集合来进行记录链表中的元素出现的次数 将出现一次的元素重新组合成为新的链表然后进行返回。 代码实现:
/* public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } } */ import java.util.*; public class Solution { public ListNode deleteDuplication(ListNode pHead){ Map<Integer,Integer> mp=new HashMap<>(); while(pHead!=null) { if(mp.containsKey(pHead.val)) { mp.put(pHead.val, mp.get(pHead.val)+1); }else { mp.put(pHead.val, 1); } pHead=pHead.next; } ListNode curN=new ListNode(-1); ListNode cur=curN; Set<Integer> keySet = mp.keySet(); Iterator<Integer> it = keySet.iterator(); while(it.hasNext()) { int key=it.next(); int val=mp.get(key); if(val==1) { cur.next=new ListNode(key); cur=cur.next; } } return curN.next; } }借鉴别人的思路:
/* public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } } */ import java.util.*; public class Solution { public ListNode deleteDuplication(ListNode pHead) { ListNode curN=new ListNode(-1); curN.next=pHead; ListNode pre=curN; ListNode last=curN.next; while(last!=null) { if(last.next!=null && last.val==last.next.val) { while(last.next!=null &&last.val==last.next.val) { last=last.next; } pre.next=last.next; last=last.next; }else { pre=pre.next; last=last.next; } } return curN.next; } }