给定一个单链表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大佬
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/327478
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!