首页 > 代码库 > 删除链表中的重复节点、剩余节点逆序输出
删除链表中的重复节点、剩余节点逆序输出
#include <stdlib.h> #include <algorithm> #include <functional> #include <iostream> #include "oj.h" using namespace std; /* 功能: 输入一个不带头节点的单向链表(链表的节点数小于100),删除链表中内容重复的节点(重复的节点全部删除),剩余的节点逆序倒排。 输入: pstrIn: 输入一个不带头节点的单向链表 输出: pstrOut:删除内容重复的节点后,逆序排列的链表(不带头节点,链表第一个节点的内存已经申请)。 返回: 示例: 输入链表的内容依次为 6,7,8,8,9,10,6 则输出链表的内容依次应该是 10,9,7 */ int iChanProcess(strNode * pstrIn,strNode * pstrOut) { if (NULL == pstrIn || NULL == pstrOut) { return -1; } strNode *pCur = pstrIn; int len = 0; while (NULL != pCur) { len++; pCur = pCur->pstrNext; } int *iArray = new int [len]; pCur = pstrIn; int iCur =0; while (NULL != pCur) { iArray[iCur] = pCur->data; iCur++; pCur = pCur->pstrNext; } sort(iArray,iArray + len, greater<int>()); pCur = pstrOut; iCur = 0; int flag = 0; //标记输出的第一个节点是否被使用 int *iArrayTemp = new int [len]; memset(iArrayTemp, 0 , sizeof(int) * len); int iCurTemp =0; int tempLen = 0; if (iArray[iCur] == iArray[iCur + 1]) //处理第一节点 { iCur ++; } else { iArrayTemp[iCurTemp] = iArray[iCur]; iCurTemp++; iCur++; } for (; iCur < len -1; ++iCur) { if (iArray[iCur] == iArray[iCur - 1] ||iArray[iCur] == iArray[iCur + 1]) { continue; } else { iArrayTemp[iCurTemp] = iArray[iCur]; iCurTemp++; } } if (iArray[iCur] != iArray[iCur - 1] ) //处理最后一个节点 { iArrayTemp[iCurTemp] = iArray[iCur]; iCurTemp++; } int iTempLen = iCurTemp; pCur = pstrOut; pCur->data = http://www.mamicode.com/iArrayTemp[0];>删除链表中的重复节点、剩余节点逆序输出
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。