[华为机试练习题]24.删除链表中的重复节点、剩余节点逆序输出

题目

描述:题目描述:输入一个不带头节点的单向链表(链表的节点数小于100),删除链表中内容重复的节点(重复的节点全部删除),剩余的节点逆序倒排。要求实现函数: void vChanProcess(strNode * pstrIn,strNode * pstrOut);【输入】 pstrIn:输入一个不带头节点的单向链表【输出】 pstrOut:删除内容重复的节点(重复的节点全部删除),剩余节点逆序输出(不带头节点,链表第一个节点的内存已经申请)。【注意】只需要完成该函数功能算法,,中间不需要有任何IO的输入输出示例 输入链表的内容依次为 6,7,8,8,9,10,6则输出链表的内容依次应该是 10,9,7练习阶段: 中级

代码

/*—————————————* 日期:2015-06-31* 作者:SJF0115* 题目:删除链表中的重复节点、剩余节点逆序输出* 来源:华为机试练习题—————————————–*/;/*功能: 输入一个不带头节点的单向链表(链表的节点数小于100),删除链表中内容重复的节点(重复的节点全部删除),剩余的节点逆序倒排。输入: pstrIn: 输入一个不带头节点的单向链表输出: pstrOut:删除内容重复的节点后,逆序排列的链表(不带头节点,链表第一个节点的内存已经申请)。返回:示例:输入链表的内容依次为 6,7,8,8,9,10,6则输出链表的内容依次应该是 10,9,7*//*本代码还是有BUG 当输入链表为 88888888时 pstrOut使用引用最好*/int iChanProcess(strNode * pstrIn,strNode * pstrOut){if(pstrIn == NULL || pstrOut == NULL){return -1;}//ifmap<int,int> Map;strNode* p = pstrIn;// 统计重复出次数while(p){if(Map.count(p->data) == 0){Map.insert(map<int,int>::value_type(p->data,1));}//ifelse{Map[p->data] = Map[p->data]+1;}//elsep = p->pstrNext;}//while// 为重复出现的逆序输出到pstrOutp = pstrIn;vector<int> vec;while(p){if(Map[p->data] == 1){vec.push_back(p->data);}//ifp = p->pstrNext;}//whileint size = vec.size();if(size == 0){return 0;}//iffor(int i = 0;i < size-1;++i){strNode* node = new strNode();node->data = vec[i];node->pstrNext = pstrOut->pstrNext;pstrOut->pstrNext = node;}//forpstrOut->data = vec[size-1];/*printf(“\n”);strNode* p1 = pstrOut;while(p1){printf(“*%d*\n”,p1->data);p1 = p1->pstrNext;}//while*/return 0;}/* 释放链表 */void vFreeChan(strNode * pstrChan){strNode* p = pstrChan;while(p){strNode* node = p;p = p->pstrNext;free(node);}//whilereturn;}

用爱生活,你会使自己幸福!用爱工作,你会使很多人幸福!

[华为机试练习题]24.删除链表中的重复节点、剩余节点逆序输出

相关文章:

你感兴趣的文章:

标签云: