/*
功能: 输入一个不带头节点的单向链表(链表的节点数小于100),删除链表中内容重复的节点(重复的节点全部删除),剩余的节点逆序倒排。
输入: pstrIn: 输入一个不带头节点的单向链表
输出: pstrOut:删除内容重复的节点后,逆序排列的链表(不带头节点,链表第一个节点的内存已经申请)。
返回:
示例:
输入链表的内容依次为 6,7,8,8,9,10,6
则输出链表的内容依次应该是 10,9,7
功能: 输入一个不带头节点的单向链表(链表的节点数小于100),删除链表中内容重复的节点(重复的节点全部删除),剩余的节点逆序倒排。
输入: pstrIn: 输入一个不带头节点的单向链表
输出: pstrOut:删除内容重复的节点后,逆序排列的链表(不带头节点,链表第一个节点的内存已经申请)。
返回:
示例:
输入链表的内容依次为 6,7,8,8,9,10,6
则输出链表的内容依次应该是 10,9,7
*/
OJ 还未通过
#include<stdio.h>
#include<stdlib.h>
#include<oj.h>
typedef struct strNode
{
int data;
strNode * pstrNext;
}strNode;
int iChanProcess(strNode * pstrIn,strNode * pstrOut)
{
if(pstrIn==NULL)
{
return -1 ;
}
//pstrOut=pstrIn;
strNode *ptmpNode=NULL;//用于遍历整个链表
strNode *qtmpNode=NULL;//从当前节点后面的那个节点开始遍历
strNode *stmpNode=NULL;//用于保存重复的那个节点
strNode *pcurNode=NULL;
strNode *ppreNode=NULL;
strNode *pnextNode=NULL;
for(ptmpNode=pstrIn;ptmpNode!=NULL;ptmpNode=ptmpNode->pstrNext)
{
for(qtmpNode=ptmpNode;qtmpNode->pstrNext!=NULL;qtmpNode=qtmpNode->pstrNext)//查找重复节点
{
if(qtmpNode->pstrNext->data==ptmpNode->data)
{
stmpNode=qtmpNode->pstrNext;
qtmpNode->pstrNext=stmpNode->pstrNext;
free(stmpNode);
}
}
}
if(pstrIn==NULL)
{
return -1;
}
pcurNode=pstrIn;
while(pcurNode!=NULL;)
{
if(pcurNode->pstrNext==NULL)
{
pstrOut=pcurNode;
}
pcurNode->pstrNext=ppreNode;
ppreNode=pcurNode;
pcurNode=pcurNode->pstrNext;
}
return 0;
}
/* 释放链表 */
void vFreeChan(strNode * pstrChan)
{
strNode *tmpNode=pstrChan;
strNode *tpNode;
if(pstrchan==NULL)
return ;
while(tmpNode!=NULL)
{
//tmpNode=
tpNode=tmpNode;
tmpNode=tmpNode->pstrNext;
free(tpNode);
}
return;
}