删除链表中重复的结点

来源:互联网 发布:openvpn如何改免流端口 编辑:程序博客网 时间:2024/05/06 11:40

题目描述

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

/*struct ListNode {    int val;    struct ListNode *next;    ListNode(int x) :        val(x), next(NULL) {    }};*/class Solution {public:    ListNode* deleteDuplication(ListNode* pHead)    {        if(!pHead||!pHead->next) return pHead;        ListNode *first=pHead,*last=pHead,*tmp=NULL,*cur=NULL;        while(first&&pHead->val==first->val){            while(pHead->val==first->val){                first=first->next;                if(!first) break;            }            if(first==pHead->next) break;            else{                while(pHead!=first){                    tmp=pHead;                    pHead=pHead->next;                    delete tmp;                }            }        }                 first=pHead;        last=pHead->next;        while(first){            while(first->next&&last->next&&first->next->val==last->next->val){                last=last->next;            }            if(first->next!=last){                cur=first;                tmp=first->next;                first->next=last->next;                last->next=NULL;                first=tmp;                while(first){                    tmp=first;                    first=first->next;                    delete tmp;                }                first=cur;                last=cur->next;            }else{                first=first->next;                last=last->next;            }        }                 return pHead;    }};


0 0