算法(17)-单链表-删除指定节点的值-C++

     给定一个单链表head和一个值num,删除链表中值为num的值。
比如1->2->3->4->5->null,num=3 删后即为:1->2->4->5.基本就一coding问题。
思路:用容器将不等于num的节点收集起来再连起来。
           提供两个版本:1.用vector
                                     2.用stack
 1.vector
     

 

//单链表,删除指定值 用容器把不是m_val收集起来然后放在list中
Node* delVal(Node* head, int m_val)
{
    Node* cur = head;
    vector<Node*> vc;            //变量定义
    int m_temp;
    while (cur != NULL)
    {   
        int m_temp;
        m_temp = cur->m_value;
        if (m_val != m_temp)
        {
            vc.push_back(cur);   //变量赋值
        }
        cur = cur->next;
    }
    int m_size = vc.size();
    cout << "*********************" << endl;
    for (int i = 0; i < m_size; i++)
    {
        cout<<" vc[i] ->m_value="<< vc[i] ->m_value<<endl;
    }
    Node* np = NULL;
    for (int i = m_size-1; i >=0; i--)//vector是从尾巴上加的,注意顺序
    {
        Node* temp = vc[i];            //新节点
        temp->next= np;
        np = temp;
    }
    cout << "*********************" << endl;
    return np;
}

 2.stack
     

Node* delVal(Node* head, int m_val)
{

    Node* cur = head;
    stack<Node*> st;          //定义
    int m_temp;
    while (cur != NULL)
    {
        int m_temp;
        m_temp = cur->m_value;
        if (m_val != m_temp)
        {
            st.push(cur);     //赋值
        }
        cur = cur->next;
    }
    Node* np = NULL;            //新head
    while (!st.empty())
    {

        Node* temp = st.top();  //取值
        st.pop();               //删除
        temp->next = np;        
        np = temp;
    }
    cout << "*********************" << endl;
    return np;
}

 

原文链接: https://www.cnblogs.com/jasmineTang/p/14369304.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    算法(17)-单链表-删除指定节点的值-C++

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/327478

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月1日 下午4:17
下一篇 2023年3月1日 下午4:17

相关推荐