虽然以前写过几篇关于链表的博客,但是感觉以前代码太乱,不严谨,而且太分散,所以重开一帖,贴上一些关于链表的操作,以后遇到相关问题就不断补充。
struct ListNode
{
int m_nValue;
ListNode *m_pNext;
};
void BuildList(ListNode *&Head, int Val) //构建链表
{
if(Head == NULL)
{
Head = new ListNode();
Head->m_nValue = Val;
Head->m_pNext = NULL;
}
else
{
ListNode *Node = Head;
while(Node->m_pNext != NULL)
{
Node = Node->m_pNext;
}
ListNode *p = new ListNode();
p->m_nValue = Val;
p->m_pNext = NULL;
Node->m_pNext = p;
}
}
void RemoveNode(ListNode *&Head, int n) //删除链表中存储n的节点
{
if(Head == NULL)
return ;
ListNode *Node = Head;
ListNode *PreNode;
bool flag = false;
if(Node->m_nValue == n)
{
Head = Head->m_pNext;
delete(Node);
Node = NULL;
return ;
}
while(Node != NULL)
{
if(Node->m_nValue == n)
{
flag = true;
break;
}
PreNode = Node;
Node = Node->m_pNext;
}
if(flag == false)
return ;
PreNode->m_pNext = Node->m_pNext;
delete(Node);
Node = NULL;
}
void ReverseList(ListNode *Node) //从尾到头打印链表
{
if(Node == NULL)
return ;
ReverseList(Node->m_pNext);
cout << Node->m_nValue << endl;
}