题目描述:
输入一个不带头节点的单向链表(链表的节点数小于100),删除链表中内容重复的节点(重复的节点全部删除),剩余的节点逆序倒排。
要求实现函数:
void vChanProcess(strNode * pstrIn,strNode * pstrOut);
【输入】 pstrIn:输入一个不带头节点的单向链表
【输出】 pstrOut:删除内容重复的节点(重复的节点全部删除),剩余节点逆序输出(不带头节点,链表第一个节点的内存已经申请)。
【注意】只需要完成该函数功能算法,中间不需要有任何IO的输入输出
示例
输入链表的内容依次为 6,7,8,8,9,10,6
则输出链表的内容依次应该是 10,9,7
/*
功能: 输入一个不带头节点的单向链表(链表的节点数小于100),删除链表中内容重复的节点(重复的节点全部删除),剩余的节点逆序倒排。
输入: pstrIn: 输入一个不带头节点的单向链表
输出: pstrOut:删除内容重复的节点后,逆序排列的链表(不带头节点,链表第一个节点的内存已经申请)。
返回:
示例:
输入链表的内容依次为 6,7,8,8,9,10,6
则输出链表的内容依次应该是 10,9,7
*/
int iChanProcess(strNode * pstrIn,strNode * pstrOut)
{
int i,j,k,iint[100],jint[100],kint[100],p,q;
i = 0;
j = 0;
if(pstrIn == 0)return 0;
while(pstrIn != 0){
iint[i++] = pstrIn->data;
pstrIn = pstrIn->pstrNext;
}
for(p = 0;p<i;p++){
for(k = 0;k < p;k++){
if(iint[p] == iint[k]){
jint[j++] = iint[p];
break;
}
}
}
k = 0;
bool fuck;
for(p = 0;p < i;p++){
fuck = false;
for(q = 0;q<j;q++){
if(jint[q] == iint[p]){
fuck = true;
break;
}
}
if(!fuck)
kint[k++] = iint[p];
}
pstrOut->data = kint[k-1];
strNode *n = pstrOut;
strNode *m;
for( p = k-2; p > -1;p--){
m = new strNode;
m->data = kint[p];
n->pstrNext = m;
m->pstrNext =0;
n = m;
}
return 0;
}
/* 释放链表 */
void vFreeChan(strNode * pstrChan)
{
strNode *s;
while(pstrChan != 0){
s = pstrChan->pstrNext;
delete pstrChan;
pstrChan = s;
}
return;
}