在一个排序的链表中,如何删除重复的节点?例如,1,2,3,3,3,4,4,4,5。删除重复的节点后,得到1,2,5
链表节点与函数的定义如下:
struct ListNode
{
int value;
ListNode* next;
};
void deleteDuplicationNode(ListNode* head);
思路:
思路很直白,遍历节点,找到每一个相同的节点,然后删掉。
代码:
void deleteDuplicationNode(ListNode* head) {
if (head == nullptr) {
return;
}
ListNode* dummyNode = new ListNode();
dummyNode->next = head;
ListNode* tmp = dummyNode;
while (tmp->next) {
if (tmp->next == tmp->next->next) {
int same = tmp->next->value;
ListNode* tmptmp = tmp->next;
while (tmptmp && tmptmp->value == same) {
ListNode* tpp = tmptmp;
tmptmp = tmptmp->next;
delete tpp;
tpp = nullptr;
}
tmp->next = tmptmp;
}
tmp = tmp->next;
}
}