第一版(单向有类型):
//author:Yuqingmu
//当不能用STL时,自己实现一个无类别链表
#include "MemLeak_Check.h"
#include "stdafx.h"
#include <stdlib.h>
typedef struct Node
{
int nValue;
Node *next;
}NODE,*pNODE;
int PushDataToList(NODE ** pHead,int nData)
{
NODE *plastNode = *pHead;
NODE *pNewNode = (NODE*)malloc(sizeof(NODE));
if(pNewNode == NULL)
{
return -1;
}
pNewNode->nValue = nData;
if(*pHead == NULL)
{
*pHead = pNewNode;
pNewNode->next = NULL;
(NODE*)(*pHead)->next = NULL;
}
else
{
pNewNode->next = plastNode;
*pHead = pNewNode;
}
return 0;
}
NODE *GetDataFromList(NODE ** pHead,int nNum)
{
NODE *pTemp = *pHead;
while (pTemp != NULL)
{
if(pTemp->nValue == nNum)
{
return pTemp;
}
pTemp = pTemp->next;
}
return NULL;
}
int ShowList(NODE** pHead)
{
if(*pHead == NULL)
{
printf("No data in List\n");
return 0;
}
NODE *pTemp = *pHead;
static int nIndex = 1;
while (pTemp != NULL)
{
printf("list data %d:%d\n",nIndex++,pTemp->nValue);
pTemp = pTemp->next;
}
return 0;
}
int FreeAllNodeFromList(NODE ** pHead)
{
NODE *pTemp = *pHead;
while (pTemp != NULL)
{
NODE *pFreeTemp = pTemp->next;
free(pTemp);
pTemp = pFreeTemp;
}
*pHead = NULL;
return 0;
}
int _tmain(int argc, _TCHAR* argv[])
{
StartMemLeakCheck();
NODE *pHead = NULL;
PushDataToList(&pHead,1);
PushDataToList(&pHead,2);
PushDataToList(&pHead,5);
PushDataToList(&pHead,55);
ShowList(&pHead);
NODE * pGet = GetDataFromList(&pHead,5);
FreeAllNodeFromList(&pHead);
PushDataToList(&pHead,525);
ShowList(&pHead);
return 0;
}