码迷,mamicode.com
首页 > 其他好文 > 详细

List小练习

时间:2014-11-24 22:05:04      阅读:270      评论:0      收藏:0      [点我收藏+]

标签:sp   问题   bs   代码   ad   amp   new   nbsp   return   

功能:创建链表节点,删除节点,顺序打印,不改变原结构的情况下分别用STL中的stack实现逆序打印和利用函数递归打印

代码如下:

//链表问题
struct ListNode
{
    int m_nValue;
    ListNode* m_pNext;
};
void AddToTail(ListNode** pHead,int value);
void RemoveNode(ListNode**pHead,int value);
void PrintList(ListNode *pHead);

#include <stack>
void PrintListReverse(ListNode *pHead);//利用模版stack实现
void PrintListReverse2(ListNode *pHead);//利用递归实现

 

void AddToTail(ListNode** pHead,int value)
{
    if (pHead == NULL)
    {
        return;
    }

    ListNode* pNode = new ListNode;
    pNode->m_nValue = value;
    pNode->m_pNext = NULL;
 
    if (*pHead == NULL)
    {
        *pHead = pNode;
    }
    else
    {//尾插法
        ListNode *pTmp = *pHead;
        while (pTmp->m_pNext != NULL)
        {
            pTmp = pTmp->m_pNext;
        }
        pTmp->m_pNext = pNode;
    }
}

void RemoveNode(ListNode**pHead,int value)
{
    if (pHead == NULL || *pHead == NULL)
    {
        return;
    }

    ListNode *pNode = *pHead;
    ListNode *pTmp = NULL;

    if (pNode->m_nValue == value)
    {
        *pHead = (*pHead)->m_pNext;
        delete pNode;
        pNode = NULL;
    }
    else
    {
        while(pNode->m_pNext != NULL && pNode->m_pNext->m_nValue != value)//注意这里判断顺序
        {
            pNode = pNode->m_pNext;
        }
        if (pNode != NULL && pNode->m_pNext->m_nValue == value)
        {
            pTmp = pNode->m_pNext;
            pNode->m_pNext = pNode->m_pNext->m_pNext;
            delete pTmp;
            pTmp = NULL;
        }
    }
}

void PrintList(ListNode *pHead)
{
    if (pHead == NULL)
    {
        return;
    }
   
    ListNode *pNode = pHead;
    while(pNode != NULL)
    {
        cout<<pNode->m_nValue<<endl;
        pNode = pNode->m_pNext;
    }
}

void PrintListReverse(ListNode *pHead)//利用STL实现
{
    if (pHead == NULL)
    {
        return;
    }
    stack<ListNode*>node;
    ListNode *pNode = pHead;
    while(pNode != NULL)
    {
        node.push(pNode);
        pNode = pNode->m_pNext;
    }
    while (!node.empty())
    {
        pNode = node.top();
        cout<<pNode->m_nValue<<endl;
        node.pop();
    }
}

void PrintListReverse2(ListNode *pHead)
{
    if (pHead != NULL)
    {
        if (pHead->m_pNext != NULL)
        {
            PrintListReverse2(pHead->m_pNext);
        }
        cout<<pHead->m_nValue<<endl;
    }
}

List小练习

标签:sp   问题   bs   代码   ad   amp   new   nbsp   return   

原文地址:http://www.cnblogs.com/Mr-Zhong/p/4119554.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!