#include <stdio.h>
//#include <malloc.h>
#include <stdlib.h>
#define MAXLEN 10
typedef struct LinkNode
{
struct LinkNode * pNext;
struct LinkNode * pPrev;
int m_Value;
}LINKNODE;
void ShowLinkNode(LINKNODE * pHead)
{
if (NULL == pHead)
{
return;
}
LINKNODE * pNode = pHead;
while (pNode!=NULL)
{
printf("%d ",pNode->m_Value);
pNode = pNode->pNext;
}
}
void CreateLinkNode(LINKNODE * pHead)
{
if(NULL == pHead)
{
return;
}
int num = 0;
for (int i = 0;i<MAXLEN;i++)
{
LINKNODE * pNode = (LINKNODE *)malloc(sizeof(LINKNODE));
pNode->pNext = NULL;
pNode->pPrev = NULL;
pNode->m_Value = rand()%MAXLEN;
if (pHead->pNext == NULL)
{
pHead->pNext = pNode;
pNode->pPrev = pHead;
}
else
{
pNode->pNext = pHead->pNext;
pHead->pNext->pPrev = pNode;
pHead->pNext = pNode;
pNode->pPrev = pHead;
}
}
}
LINKNODE * DeleteLinkNode(LINKNODE * pHead,int key_value)
{
if (NULL == pHead)
{
return NULL;
}
LINKNODE * pNode = pHead;
LINKNODE * pDeleteNode = pHead;
int NeedDelete = 0;
while(pNode!=NULL)
{
if (pNode->m_Value == key_value)
{
pDeleteNode = pNode;
if(pNode == pHead)
{
/*链表第一个节点*/
pHead = pHead->pNext;
pNode = pHead;
}
else
{
if (pNode->pNext == NULL)
{
/*链表最后一个节点*/
pNode->pPrev->pNext = NULL;
pNode->pPrev = NULL;
}
else
{
pNode->pPrev->pNext = pNode->pNext;
pNode->pNext->pPrev = pNode->pPrev;
}
pNode = pNode->pNext;
}
free(pDeleteNode);
pDeleteNode = NULL;
}
else
{
pNode = pNode->pNext;
}
}
return pHead;
}
int main()
{
LINKNODE * pHead = NULL;
pHead = (LINKNODE *)malloc(sizeof(LINKNODE));
pHead->m_Value = -1;
pHead->pNext = NULL;
pHead->pPrev = NULL;
CreateLinkNode(pHead);
ShowLinkNode(pHead);
printf("\n");
pHead = DeleteLinkNode(pHead,8);
printf("After Delete Target Num :\n");
ShowLinkNode(pHead);
}
双向链表创建、删除某节点
最新推荐文章于 2024-07-03 13:01:15 发布