单链表中删除重复结点

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))。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值