zoukankan      html  css  js  c++  java
  • List小练习

    功能:创建链表节点,删除节点,顺序打印,不改变原结构的情况下分别用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;
        }
    }

    生命在于折腾,生活就是如此的丰富多彩
  • 相关阅读:
    NotifyIcon控件
    JS中的tostring()方法
    WebApp之Meta标签总结
    List<T>用法
    JSON.parse()和JSON.stringify()
    背景图片移动插件MyFloatingBg(浮动背景图效果,可让背景随着页面的滚动而滚动)
    illegal mix of collcations表连接时非法的校对
    truncate 命令删除恢复
    php里 换行问题
    mysql命令行导出导入数据库
  • 原文地址:https://www.cnblogs.com/Mr-Zhong/p/4119554.html
Copyright © 2011-2022 走看看