#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct NODE
{
int id;
struct NODE* pNext;
}List;
void AddNode(List **ppHead,List **ppEnd,int id) ;
void DeleteNode(List **ppHead,List **ppEnd,int id);
int main()
{
List *pHead = NULL;
List *pEnd = NULL;
AddNode(&pHead,&pEnd,1);
AddNode(&pHead,&pEnd,2);
AddNode(&pHead,&pEnd,3);
AddNode(&pHead,&pEnd,4);
DeleteNode(&pHead,&pEnd,3);
while(pHead != NULL)
{
printf("%d\n",pHead->id);
pHead=pHead->pNext;
}
return 0;
}
void AddNode(List **ppHead,List **ppEnd,int id)
{
List* pTemp=(List*)malloc(sizeof(List));
pTemp->id=id;
pTemp->pNext=NULL;
if(NULL == *ppHead)
{
*ppHead=pTemp;
}
else
{
(*ppEnd)->pNext=pTemp;
}
*ppEnd=pTemp;
}
void DeleteNode(List **ppHead,List **ppEnd,int id)
{
List *pDel=NULL;
List* pMark=*ppHead;
//1.判断是否为头删除
if((*ppHead)->id == id)
{
//删除标记指向头
List* pDel=*ppHead;
//头指针指向头的下一个
*ppHead=(*ppHead)->pNext;
//释放删除标记
free(pDel);
pDel= NULL;
return ;
}
//2.中间删除
//遍历链表:让遍历标记停在删除节点前一个节点
while(pMark ->pNext != NULL)
{
if(pMark ->pNext->id== id)
{
//删除标记指向遍历标记的下一个
pDel=pMark->pNext;
//遍历标记的下一个指向遍历标记的下一个的下一个
pMark->pNext=pMark->pNext->pNext;
//释放
free(pDel);
pDel=NULL;
}
//判断删除的是否是尾
if(NULL == pMark->pNext)
{
//是:尾指针指向遍历标记
*ppEnd=pMark;
}
return;
}
pMark=pMark->pNext;
}
删除链表
最新推荐文章于 2024-05-22 19:09:32 发布