#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef int DataType;
typedef struct node
{
DataType Data;
struct node *pNext;
}LinkNode;
//创建头节点
LinkNode *CreateLinkList(void)
{
LinkNode *pTmpNode = NULL;
pTmpNode = malloc(sizeof(LinkNode));
if (NULL == pTmpNode)
{
return NULL;
}
pTmpNode->pNext = NULL;
return pTmpNode;
}
//头插法
int InsertHeadLinkList(LinkNode *pHead, DataType TmpData)
{
LinkNode *pTmpNode = NULL;
pTmpNode = malloc(sizeof(LinkNode));
if (NULL == pTmpNode)
{
return -1;
}
pTmpNode->Data = TmpData;
pTmpNode->pNext = pHead->pNext;
pHead->pNext = pTmpNode;
return 0;
}
//打印数据
int ShowLinkList(LinkNode *pHead)
{
LinkNode *pTmpNode = NULL;
pTmpNode = pHead->pNext;
while (pTmpNode != NULL)
{
printf("%d ", pTmpNode->Data);
pTmpNode = pTmpNode->pNext;
}
printf("\n");
return 0;
}
//数据替换
int ReplaceLinkList(LinkNode *pHead, DataType OldData, DataType NewData)
{
LinkNode *pTmpNode = NULL;
pTmpNode = pHead->pNext;
while (pTmpNode != NULL)
{
if (pTmpNode->Data == OldData)
{
pTmpNode->Data = NewData;
}
pTmpNode = pTmpNode->pNext;
}
return 0;
}
//删除节点
int DeleteLinkList(LinkNode *pHead, DataType TmpData)
{
LinkNode *pPreNode = NULL;
LinkNode *pTmpNode = NULL;
pTmpNode = pHead->pNext;
pPreNode = pHead;
while (pTmpNode != NULL)
{
if (pTmpNode->Data == TmpData)
{
pPreNode->pNext = pTmpNode->pNext;
free(pTmpNode);
pTmpNode = pPreNode->pNext;
}
else
{
pTmpNode = pTmpNode->pNext;
pPreNode = pPreNode->pNext;
}
}
return 0;
}
//回收链表
int DestroyLinkList(LinkNode **ppHead)
{
LinkNode *pTmpNode = NULL;
LinkNode *pFreeNode = NULL;
pTmpNode = pFreeNode = *ppHead;
while (pTmpNode != NULL)
{
pTmpNode = pTmpNode->pNext;
free(pFreeNode);
pFreeNode = pTmpNode;
}
*ppHead = NULL;
return 0;
}
int main(void)
{
LinkNode *linklist = NULL;
linklist = CreateLinkList();
InsertHeadLinkList(linklist, 1);
InsertHeadLinkList(linklist, 2);
InsertHeadLinkList(linklist, 3);
InsertHeadLinkList(linklist, 4);
InsertHeadLinkList(linklist, 5);
ShowLinkList(linklist);
ReplaceLinkList(linklist, 5, 50);
ReplaceLinkList(linklist, 1, 10);
ShowLinkList(linklist);
DeleteLinkList(linklist, 50);
DeleteLinkList(linklist, 10);
ShowLinkList(linklist);
DestroyLinkList(&linklist);
return 0;
}