删除链表中重复元素

来源:互联网 发布:黄岩法院淘宝拍卖网 编辑:程序博客网 时间:2024/05/02 01:02
    在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5。    解析:在链表头部加入一个新的头结点。设置三个指针:pPre初始化为新的头结点的指针。pCur指向原来链表的头结点。pNext指向pCur的下一个结点。每次比较当前节点和下一个结点的值。如果相等则删除pNext指向的结点,pNext重新指向原先位置的下一个位置。
ListNode *deleteDuplication01(ListNode *pHead){if (pHead == NULL || pHead->next == NULL)return pHead;ListNode *pNew = new ListNode;pNew->val = -100;pNew->next = pHead;pHead = pNew;ListNode *pPre = pHead;ListNode *pCur = pHead->next;ListNode *pNext = pCur->next;while (pNext){bool flag = true;while (pNext != NULL && pCur->val == pNext->val){ListNode *tmp = pNext;pNext = pNext->next;delete tmp;flag = false;}//之前有重复元素if (!flag){delete pCur;pPre->next = pNext;if (pNext == NULL)return pHead->next;pCur = pNext;pNext = pNext->next;}//没有重复元素else{pPre = pCur;pCur = pNext;pNext = pNext->next;}}return pHead->next;}
0 0
原创粉丝点击