删除单链表中的重复结点

方法一:递归

link delSame(link head)
{/*	不变式:list{k..n-1}没有重复的元素,加入list{k-1}后,为了保持不变式
	要从list{k-1..n-1}两两比较,如果有相同元素必定在开头两个*/

	link pointer,temp = head;
	if(head->next == NULL)
		return head;
	head->next = delSame(head->netx);

	pointer = head->next;
	while(pointer != NULL)
	{
		if(head->value == pointer->value)
		{
			temp->next =pointer->next;
			free(pointer);
			pointer = temp->next;
		}
		else
		{
			pointer = pointer->next;
			temp = temp->next;
		}
	}
	return head;
}

方法二:hash
建立一个hash_map,key为遍历链表中的内容,value是次数
1)从头遍历链表,若链表内容不在hash_map中,则加入并向后遍历
2)若链表内容在hash_map中(value = 1),则删除结点,继续向后遍历。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值