关闭

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

65人阅读 评论(0) 收藏 举报
分类:

题目原文:
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%

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:64252次
    • 积分:3285
    • 等级:
    • 排名:第10717名
    • 原创:270篇
    • 转载:53篇
    • 译文:0篇
    • 评论:8条
    文章分类
    最新评论