剑指offer-删除链表中的重复结点

题目描述:在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5

ac代码:

 1 /*
 2  public class ListNode {
 3     int val;
 4     ListNode next = null;
 5 
 6     ListNode(int val) {
 7         this.val = val;
 8     }
 9 }
10 */
11 import java.util.ArrayList;
12 import java.util.Arrays;
13 import java.util.HashMap;
14 import java.util.Map;
15 public class Solution {
16     public ListNode deleteDuplication(ListNode pHead)
17     {
18                   ListNode p=pHead;
19         Map<Integer,Integer>map=new HashMap<Integer,Integer>();
20         ArrayList<ListNode>list=new ArrayList<ListNode>();
21         while(p!=null){
22             if(map.containsKey(p.val)){
23                 map.put(p.val,map.get(p.val)+1);
24             }else{
25                 map.put(p.val,1);
26                 
27             }
28             list.add(p);
29             p=p.next;
30         }
31         for(int i=0;i<list.size();i++){
32             p=list.get(i);
33             if(map.get(p.val)>1){
34                 for(int j=0;j<map.get(p.val);j++){
35                     list.remove(i);
36                 }
37                 i--;
38             }
39         }
40         for(int i=0;i<list.size()-1;i++){
41             p=list.get(i);
42             p.next=list.get(i+1);
43         }
44         if(list.size()!=0){
45         list.get(list.size()-1).next=null;
46         return list.get(0);
47         }else
48             return null;
49     }
50 }
原文地址:https://www.cnblogs.com/llsq/p/8809886.html