`
阿尔萨斯
  • 浏览: 4147530 次
社区版块
存档分类
最新评论

练习 删除链表中的重复节点、剩余节点逆序输出

 
阅读更多

题目描述:
输入一个不带头节点的单向链表(链表的节点数小于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;
}




分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics