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

来源:互联网 发布:编程一般多少钱一个月 编辑:程序博客网 时间:2024/06/05 05:40

题目描述

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

跟 lintcode中这题不同 http://www.lintcode.com/en/problem/remove-duplicates-from-sorted-list/#
本题要求重复的全部去掉!

/*struct ListNode {    int val;    struct ListNode *next;    ListNode(int x) :        val(x), next(NULL) {    }};*/class Solution {public:    ListNode* deleteDuplication(ListNode* pHead)    {        if (pHead == NULL){            return NULL;        }        ListNode dummy(0);        dummy.next = pHead;        ListNode* pre = &dummy;        ListNode*p = pHead;        while (p){            int cnt = 0;            while (p->next && p->next->val == p->val){                ListNode * tmp = p;                p = p->next;                delete tmp;                cnt++;            }            if (cnt > 0){                ListNode *tmp = p;                p = p->next;                delete tmp;                pre->next = p;                //            }            else{                pre = p;                p = p->next;            }        }        return dummy.next;    }};
1 0