82.Remove Duplicates from Sorted List II

Posted cing

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了82.Remove Duplicates from Sorted List II相关的知识,希望对你有一定的参考价值。

题目链接

题目大意:删除有序单链表中所有重复的数字,将非重复的数字留下来。与83有点 区别。

法一:记录前面的重复节点,将当前结点与下一个节点和上一个重复节点进行比较,(因为可能出现3->3->3的情况),如果都不重复,则将节点保留,其他重复节点都删除。代码如下(耗时1ms):

技术分享图片
 1     public ListNode deleteDuplicates(ListNode head) {
 2         //pre记录前面最后一个重复的结点,cur进行遍历
 3         ListNode res = null, cur = res, pre = null;
 4         while(head != null) {
 5             //如果前后节点重复则跳过,即删除
 6             if(head.next != null && head.val == head.next.val) {
 7                 pre = head;
 8                 head = head.next.next;
 9             }
10             //如果当前节点与上一个节点重复,则删除
11             else if(pre != null && head.val == pre.val) {
12                 head = head.next;
13             }
14             //如果不重复,则将结点保留
15             else {
16                 //尾插
17                 if(cur == null) {
18                     cur = head;
19                     res = cur;
20                 }
21                 else {
22                     cur.next = head;
23                     cur = head;
24                 }
25                 head = head.next;
26             }
27         }
28         if(cur == null) {
29             return null;
30         }
31         cur.next = null;
32         return res;
33     }
View Code

 

以上是关于82.Remove Duplicates from Sorted List II的主要内容,如果未能解决你的问题,请参考以下文章

82. Remove Duplicates from Sorted List II

82. Remove Duplicates from Sorted List II(js)

82. Remove Duplicates from Sorted List II

82. Remove Duplicates from Sorted List II

82. Remove Duplicates from Sorted List II

82. Remove Duplicates from Sorted List II