/*
* 在一个排序的链表中,删除重复的结点(意味着连续出现相同的结点,这些的结点全部删除)
* 1. 注意头结点可能被删除,因此函数参数声明中应该使用二级指针指向头结点所在的指针
* 2.
*/
#include <iostream>
using namespace std;
struct ListNode {
int value;
ListNode* next;
};
void deleteDuplicatedNode(ListNode** pHead) {
if(pHead == NULL || *pHead == NULL)
return;
ListNode* pPreNode = NULL;
ListNode* pNode = *pHead;
while(pNode != NULL) {
ListNode* pNext = pNode->next;
bool isNeedDeleted = false;
if(pNext != NULL && pNext->value == pNode->value)
isNeedDeleted = true;
if(!isNeedDeleted) {
pPreNode = pNode;
pNode = pNode->next;
} else {
ListNode* pToDeleted = pNode;
int value = pNode->value;
while(pToDeleted->next != NULL && pToDeleted->value == value) {
pNext = pToDeleted->next;
delete pToDeleted;
pToDeleted = NULL;
pToDeleted = pNext;
}
if(pPreNode == NULL)
*pHead = pNext; //头结点被删除的情况
else
pPreNode->next = pNext;
pNode = pNext; // 继续遍历
}
}
}
int main(int argc, char const *argv[]) {
//testing cases
return 0;
}
剑指offer(面试题18):删除有序链表中的重复结点
最新推荐文章于 2023-04-01 17:19:30 发布