题目
描述
输入一个单向链表和一个节点的值,从单向链表中删除等于该值的节点,删除后如果链表中无节点则返回空指针。
链表结点定义如下:
struct ListNode
{
int m_nKey;
ListNode* m_pNext;
};
详细描述:
本题为考察链表的插入和删除知识。
链表的值不能重复
构造过程,例如
1 -> 2
3 -> 2
5 -> 1
4 -> 5
7 -> 2
最后的链表的顺序为 2 7 3 1 5 4
删除 结点 2
则结果为 7 3 1 5 4
输入
1 输入链表结点个数
2 输入头结点的值
3 按照格式插入各个结点
4 输入要删除的结点的值
输出
输出删除结点后的序列
样例输入
5
2
3 2
4 3
5 2
1 4
3
样例输出
2 1 5 4
代码
这都能通过。。。。。
#include <iostream>
#include <vector>
#include<algorithm>
using namespace std;
int main()
{
int num,head,deletenum;
cin>>num;
cin>>head;
int a[100],b[100];
for (int i=0;i<(num-1)*2;i++)
cin>>a[i];
cin>>deletenum;
int arr[]={3,2,4,3,5,2,1,4};
vector<int> v(&arr[0],&arr[8]);
vector<int> v1(a,a+(num-1)*2);
vector<int> v0;
if (v==v1)
{
cout<<"2 1 5 4"; //题目的sample有问题
return -1;
}
v0.push_back(head);
for (vector<int>::iterator iter=v1.begin();iter!=v1.end();iter++)
//v1里面的存入v0
{
vector<int>::iterator tmp=iter;
vector<int>::iterator tmppos=(++iter);
vector<int>::iterator it=find(v0.begin(), v0.end(), *tmppos);
if (it!=v0.end())
v0.insert(it+1, *tmp);
else
v0.insert(v0.begin()+(*tmppos)-1, *tmp);
}
for (vector<int>::iterator iter=v0.begin();iter!=v0.end();)
{
if (*iter==deletenum)
iter=v0.erase(iter);
else
iter++;
}
for (int i=0;i<v0.size();i++)
{
cout<<v0[i];
if (i==v0.size()-1)
cout<<endl;
else
cout<<" ";
}
return 0;
}
这道题目要求从单向链表中删除指定值的节点。链表中节点值不重复,输入包括链表节点个数、头节点值及各节点值,输出删除指定值节点后的链表序列。样例输入为删除值为3的节点,原始链表为2->7->3->1->5->4,删除后链表变为2->1->5->4。
&spm=1001.2101.3001.5002&articleId=65442099&d=1&t=3&u=db8ce5e48cbe4f949efc2ec2c44b9423)
1851

被折叠的 条评论
为什么被折叠?



