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

来源:互联网 发布:淘宝折扣群是真的吗 编辑:程序博客网 时间:2024/06/07 06:22

题目:在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表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 == NULL)            return NULL;         ListNode *pNode = pHead;        ListNode *preNode = NULL;  //指向 pNode 的前一个结点      //  preNode->next = pNode;        while(pNode != NULL)         {             ListNode *pNext = pNode->next;            bool Tobedelete = false;            if(pNext != NULL && pNode->val == pNext->val)                Tobedelete = true;            if(!Tobedelete)                {                //preNode->next = pNode;  // 就因为这一句写错了,就多折腾了二十分钟啊!!!!                preNode = pNode;                pNode = pNode->next;            }            else{                int value = pNode->val;                ListNode* TobeDeleNode = pNode;                while(TobeDeleNode != NULL && TobeDeleNode->val ==value)                    {                    pNext = TobeDeleNode->next;                    delete TobeDeleNode;                    TobeDeleNode = NULL;                    TobeDeleNode = pNext;                }                if(preNode == NULL)  // 第一个结点就删除了                    {                    pHead = pNext;                }                else{                    preNode->next = pNext;                }                pNode = pNext;            }        }        return pHead;    }       };

分析:看着感觉确实不难,,,写起来来还是花了大约一个小时,切记眼高手低啊

原创粉丝点击