华为笔试题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; }