链表是一种动态数据结构,即创建链表时,当插入一个节点,我们只需要为新节点分配内存,然后调整指针的指向来确保新节点被链接到链表中。内存分配时每增加一个节点分配一次内存。
单向链表节点定义:
typedef struct ListNode
{
int m_nValue;
ListNode *m_pNext;
}ListNode;
在链表的末尾增加节点
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 RemoveNode(ListNode *&pHead, int value)
{
if(pHead==NULL)
return;
ListNode *pToBeDelete =NULL;
if(pHead->m_nValue == value)
{
pToBeDelete=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)
{
pToBeDelete=pNode->m_pNext;
pNode->m_pNext=pNode->m_pNext->m_pNext;
}
}
if(pToBeDelete != NULL)
{
delete pToBeDelete;
pToBeDelete=NULL;
}
}