华为笔试题04

  • 题目描述:

删除链表中内容重复的节点(重复的节点只保留一个),剩余节点按照节点内容升序排列

输入一个不带头节点的单向链表(链表的节点数小于100),删除链表中内容重复的节点(重复的节点只保留一个)。

  • 要求实现函数:

void vChanProcess(strNode * pstrIn,strNode * pstrOut);

【输入】 pstrIn:输入一个不带头节点的单向链表

【输出】 pstrOut:将链表按照链表中data的大小降序排列后的链表(不带头节点,链表第一个节点的内存已经申请)。

【注意】只需要完成该函数功能算法,中间不需要有任何IO的输入输出

 

//利用 vector set 容器快速计算
void vChanProcess(strNode *pstrIn,strNode *pstrOut)
{
	vector<int> a;
	while(pstrIn->next!=NULL)
	{
		a.push_back(pstrIn->a);
		pstrIn=pstrIn->next;
	}

	set<int> b;
	b.insert(a.begin(),a.end());
	for(set<int>::reverse_iterator iter=b.rbegin();iter!=b.rend();++iter)
	{
		pstrOut->a=*iter;
		strNode* p_next=new strNode; 
		pstrOut->next=p_next;
		pstrOut=p_next;
	}
	pstrOut->next=NULL;

}

  

posted @ 2013-08-22 20:11  一桶白开水  阅读(316)  评论(0编辑  收藏  举报