在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表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; }
删除链表中重复元素
最新推荐文章于 2024-04-15 12:24:40 发布