题主用的是VS2013编辑器
链表的创建头文件:
struct ListNode
{
int m_nValue;
ListNode* m_pNext;
};
_declspec(dllexport) ListNode* CreateListNode(int value);
_declspec(dllexport)void CoonnectListNode(ListNode* pCurrent, ListNode* pNext);
_declspec(dllexport)void PrintListNode(ListNode* pNode);
_declspec(dllexport)void PrintList(ListNode* pHead);
_declspec(dllexport)void DestroyList(ListNode* pHead);
_declspec(dllexport)void AddToTail(ListNode** pHead, int value);
_declspec(dllexport)void RevomeNode(ListNode** pHead, int value);
实现方法:
#include "list.h"
#include "stdio.h"
#include "stdlib.h"
ListNode* CreateListNode(int value){
ListNode* pNode = new ListNode();
pNode->m_nValue = value;
pNode->m_pNext = NULL;
return pNode;
}
void CoonnectListNode(ListNode* pCurrent, ListNode* pNext){
if (pCurrent == NULL)
{
printf("error to connect\n");
exit(1);
}
pCurrent->m_pNext = pNext;
}
void PrintListNode(ListNode* pNode){
if (pNode == NULL)
{
printf("the node is NULL\n");
}
else
{
printf("the key in node is %d\n", pNode->m_nValue);
}
}
void PrintList(ListNode* pHead){
printf("start.\n");
ListNode* pNode = pHead;
while (pNode != NULL)
{
printf("%d\t",pNode->m_nValue);
pNode = pNode->m_pNext;
}
printf("end\n");
}
void DestroyList(ListNode* pHead){
ListNode* pNode = pHead;
while (pNode != NULL)
{
pHead = pHead->m_pNext;
delete pNode;
pNode = pHead;
}
}
void AddToTail(ListNode** pHead, int value){
ListNode* pNew = new ListNode();
pNew->m_nValue = value;
pNew->m_pNext = NULL;
if (*pHead ==NULL)
{
*pHead = pNew;
}
else
{
ListNode* pNode = *pHead;
while (pNode->m_pNext !=NULL)
{
pNode = pNode->m_pNext;
}
pNode->m_pNext = pNew;
}
}
void RevomeNode(ListNode** pHead, int value){
if (pHead==NULL || *pHead == NULL)
{
return;
}
ListNode* pToBeDeleted = NULL;
if ((*pHead)->m_nValue==value)
{
pToBeDeleted = *pHead;
*pHead = (*pHead)->m_pNext;
}
else
{
ListNode* pNode = *pHead;
while (pNode->m_pNext!=NULL && pNode->m_pNext->m_nValue!=value)
{
pNode = pNode->m_pNext;
}
if (pNode->m_pNext!=NULL&& pNode->m_pNext->m_nValue == value)
{
pToBeDeleted = pNode->m_pNext;
pNode->m_pNext = pNode->m_pNext->m_pNext;
}
}
if (pToBeDeleted !=NULL)
{
delete pToBeDeleted;
pToBeDeleted->m_pNext = NULL;
}
}