您的位置:首页 > 其它

单链表操作

2014-05-21 11:14 141 查看
#include <iostream>
using namespace std;

struct ListNode{
int m_iValue;
ListNode* m_pNext;
};

//添加节点
void AddToTail(ListNode** pHead,int val)
{
ListNode* pNewNode=new ListNode;
pNewNode->m_iValue=val;
pNewNode->m_pNext=NULL;

if (*pHead==NULL)
{
*pHead=pNewNode;
}
else
{
ListNode* pNode=*pHead;
while(pNode->m_pNext!=NULL)
pNode=pNode->m_pNext;

pNode->m_pNext=pNewNode;
}
}

//删除节点
void RemoveNode(ListNode** pHead, int val)
{
if (pHead==NULL || *pHead==NULL)
return;

ListNode* pToBeDeleted=NULL;
if ((*pHead)->m_iValue==val)
{
pToBeDeleted=*pHead;
*pHead=(*pHead)->m_pNext;
}
else
{
ListNode* pNode=*pHead;
while(pNode->m_pNext!=NULL  && pNode->m_pNext->m_iValue!=val)
pNode=pNode->m_pNext;

if (pNode->m_pNext!=NULL)
{
pToBeDeleted=pNode->m_pNext;
pNode->m_pNext=pToBeDeleted->m_pNext;
}
}

if (pToBeDeleted!=NULL)
{
delete pToBeDeleted;
pToBeDeleted=NULL;
}
}

//后序打印
void PrintReverse(const ListNode* pNode)
{
if (pNode->m_pNext!=NULL)
{
PrintReverse(pNode->m_pNext);
}
cout<<pNode->m_iValue<<endl;
}

int main()
{
ListNode* pList=NULL;
ListNode** pHead=&pList;
for (int i=0;i<10;++i)
{
AddToTail(pHead,i);
}
RemoveNode(pHead,7);
PrintReverse(*pHead);
}




后序链表学习继续补充。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: