template<typename T>
void LinkList<T>::delSameValue(){
LinkListNode<T> *ptr1 = this->head;
while(ptr1->next != NULL){
LinkListNode<T>* ptr2 = ptr1->next, *pre = ptr1;
while(ptr2 != NULL){
if(ptr2->value == ptr1->value){
// delete ptr2, ptr2 points to ptr2->next
ptr2 = ptr2->next;
pre->next->next = NULL;
pre->next = ptr2;
}
else{
ptr2 = ptr2->next;
pre = pre->next;
}
}
ptr1 = ptr1->next;
}
}
单链表中删除重复结点,是10号晚上兰亭集势在算法笔试题,当时没有写出来,自己的水平还是太低啊。
如果不考虑算法的复杂度,最容易想到的是两层遍历,遇到重复结点就删除。那么算法的时间复杂度就是O(n^2)了。
有没有更好的思路呢?先排序再删除会快一些,最快的话会是O(nlog(n))。