码迷,mamicode.com
首页 > 其他好文 > 详细

刷题--删除链表中重复的节点

时间:2017-11-04 00:11:30      阅读:204      评论:0      收藏:0      [点我收藏+]

标签:pre   solution   delete   db2   let   head   close   dup   port   

题目描述:

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

【解1】使用HashMap记录每个节点是否重复出现,时间复杂度为O(N),空间复杂度为O(N)

技术分享
 1 import java.util.*;
 2  
 3 /*
 4  public class ListNode {
 5     int val;
 6     ListNode next = null;
 7  
 8     ListNode(int val) {
 9         this.val = val;
10     }
11 }
12 */
13 public class Solution {
14     public ListNode deleteDuplication(ListNode pHead)
15     {
16         // 解法1:使用hashMap记录个数
17         if(pHead==null)
18             return pHead;
19         HashMap<Integer, Boolean> map = new HashMap<Integer, Boolean>();
20         ListNode cur = pHead;
21         while(cur != null){
22             if(map.containsKey(cur.val) == false){
23                 map.put(cur.val, true);
24             }else{
25                 map.put(cur.val, false);
26             }
27             cur = cur.next;
28         }
29          
30         Set<Integer> set = map.keySet();
31         boolean isfst = true;
32         ListNode pre = pHead;
33         for (int temp : set){
34             if (map.get(temp) == true){
35                 if(isfst){
36                     pHead.val = temp;
37                     isfst = false;
38                 }
39                 else{
40                     pre.next.val = temp;
41                     pre = pre.next;
42                 }
43             }
44          
45         }
46         if(isfst) // 链表中只含有重复节点
47             return null;
48         else     // 链表含有不重复的节点
49             pre.next = null;
50         return pHead;
51     }
52 }
View Code

【解2】每次找到一个不重复的节点,加入新的链表末尾,最后返回新链表的头指针,时间复杂度O(N),空间复杂度O(1)

技术分享
 1 import java.util.*;
 2  
 3 /*
 4  public class ListNode {
 5     int val;
 6     ListNode next = null;
 7  
 8     ListNode(int val) {
 9         this.val = val;
10     }
11 }
12 */
13 public class Solution {
14     public ListNode deleteDuplication(ListNode pHead)
15     {
16         // 解法2:每次找一个不重复的元素,加入链表
17         if(pHead==null)
18             return pHead;
19         ListNode newhead = new ListNode(1);
20         ListNode index = newhead;
21         ListNode p = pHead;
22         boolean rept = false;
23          
24         while(p!=null){
25             rept = false;
26             while(p.next!=null && p.val == p.next.val){
27                 rept = true;
28                 p = p.next;
29             }
30             if(rept == false){
31                 index.next = new ListNode(p.val);
32                 index = index.next;
33                 p = p.next;
34             }else{
35                 if(p.next == null){
36                     break;
37                 }else{
38                     p = p.next;
39                 }   
40             }
41         }
42          
43         return newhead.next;
44     }
45 }
View Code

 

刷题--删除链表中重复的节点

标签:pre   solution   delete   db2   let   head   close   dup   port   

原文地址:http://www.cnblogs.com/HITSZ/p/7780573.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!