Middle-题目84:82. Remove Duplicates from Sorted List II

原创 2016年05月31日 17:14:32

题目原文:
Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list.
For example,
Given 1->2->3->3->4->4->5, return 1->2->5.
Given 1->1->1->2->3, return 2->3.
题目大意:
给出一个排序好的链表,删除所有重复元素,只保留一个,且保持原来的顺序。
题目分析:
维护两个指针p1和p2,其中p2指向p1下一个节点,每次判断p1和p2的值是否相等,如果相等则删掉p2,且p2向后推,直到p2不等于p1,再令p1等于p2继续判断,总共扫描一遍链表即可。
源码:(language:c)

struct ListNode* deleteDuplicates(struct ListNode* head) {
     if (!head || !head->next)
         return head;
     else {
         struct ListNode* ptr1 = head, *ptr2 = head;
         while (ptr2) {
             ptr1 = ptr2;
             while (ptr2 && ptr2->val == ptr1->val)
                 ptr2 = ptr2->next;
             if (ptr1->next == ptr2)  // no duplicate
                 ptr1 = ptr2;
             else if (ptr1 == head)
                 head = ptr2;
             else {
                 struct ListNode* prev = head;
                 while (prev->next != ptr1)
                     prev = prev->next;
                 prev->next = ptr2;
                 ptr1 = ptr2;
             }
         }

         return head;
     }
 }

成绩:
4ms,beats 8.00%,众数4ms,92%

版权声明:完整版Leetcode题解请出门左转https://github.com/cmershen1/leetcode/tree/master/docs

Remove Duplicates from Sorted List II 移除重复元素和其本身(重重)

题目: 点击打开链接 解答: 设置一个flag标志 代表当前元素是否是重复元素 如果是重复元素 在...
  • skyoceanlover
  • skyoceanlover
  • 2014年08月29日 20:49
  • 282

Remove Duplicates from Sorted List(去除有序链表中的重复元素)

Given a sorted linked list, delete all duplicates such that each element appear only once.(给定一个有序链表,...
  • ajiangfan
  • ajiangfan
  • 2016年10月12日 11:17
  • 249

CareerCup之2.1无序链表删除重复元素

【题目】 原文: 2.1 Write code to remove duplicates from an unsorted linked list. FOLLOW UP H...
  • SunnyYoona
  • SunnyYoona
  • 2014年05月18日 17:08
  • 1934

Remove Duplicates from Sorted Array——移除排序数组中重复元素

Remove Duplicates from Sorted Array Given a sorted array, remove the duplicates in place such tha...
  • suibianshen2012
  • suibianshen2012
  • 2016年08月17日 23:09
  • 241

Leetcode全数组问题

目录 1、编号2 Median of Two Sorted Arrays There are two sorted arrays A and B of size m and n respe...
  • wangxiaojun911
  • wangxiaojun911
  • 2014年02月06日 03:32
  • 6363

【LeetCode-面试算法经典-Java实现】【019-Remove Nth Node From End of List(移除单链表的倒数第N个节点)】

【019-Remove Nth Node From End of List(移除单链表的倒数第N个节点)】【LeetCode-面试算法经典-Java实现】【所有题目目录索引】原题  Given a l...
  • DERRANTCM
  • DERRANTCM
  • 2015年07月22日 07:24
  • 2058

【LeetCode-面试算法经典-Java实现】【082-Remove Duplicates from Sorted List II(排序链表中删除重复元素II)】

【082-Remove Duplicates from Sorted List II(排序链表中删除重复元素II)】【LeetCode-面试算法经典-Java实现】【所有题目目录索引】原题  Give...
  • DERRANTCM
  • DERRANTCM
  • 2015年08月04日 06:54
  • 1543

Remove Duplicates from Sorted Array II 从有序数组里移除重复出现元素,最多重复出现2次 @LeetCode

这是一类典型的题,思路是,一开始可以再开一个辅助数组,这样会更直观一些。如果新数组改变不会影响原数组,则可以合并起来,如本题。 package Level2; import java.util...
  • hellobinfeng
  • hellobinfeng
  • 2013年10月20日 12:55
  • 4291

遍历List 同时 remove 元素

List list = new ArrayList(); list.add(1); list.add(2); list.add(3); list.add(4); list.add(...
  • Vestigge
  • Vestigge
  • 2013年01月21日 14:22
  • 3722

基于C++ list中erase与remove函数的使用详解

erase的作用是,使作为参数的迭代器失效,并返回指向该迭代器下一参数的迭代器。 如下: 复制代码代码如下: list ParticleSystem; list::iter...
  • wujin8589
  • wujin8589
  • 2016年07月21日 08:16
  • 244
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Middle-题目84:82. Remove Duplicates from Sorted List II
举报原因:
原因补充:

(最多只允许输入30个字)