从单向链表中删除指定值的节点(OJ 不用看这题)
2017-03-23 12:25
411 查看
题目
描述
输入一个单向链表和一个节点的值,从单向链表中删除等于该值的节点,删除后如果链表中无节点则返回空指针。链表结点定义如下:
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 输入要删除的结点的值
输出
输出删除结点后的序列样例输入
52
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; }
相关文章推荐
- 华为OJ:从单向链表中删除指定值的节点
- 华为OJ(从单向链表中删除指定值的节点)
- 【华为OJ】【093-从单向链表中删除指定值的节点】
- 华为oj中级 从单向链表删除指定节点
- OJ-------从单向链表中删除指定节点
- 华为OJ——从单向链表中删除指定值的节点
- 华为OJ——从单向链表中删除指定值的节点
- 华为OJ从单向链表中删除指定值的节点
- 删除单向链表的指定节点
- 数据结构之链表面试题汇总(四)得到两个单链表相交的第一个交点、用O(1)的时间效率删除单向链表中的指定节点
- 从单向链表中删除指定值的节点
- 华为机试:从单向链表中删除指定值的节点
- 从单向链表中删除指定值的节点
- 从单向链表中删除指定值的节点
- 从单向链表中删除指定值的节点(格式控制真坑,末尾要打印空格,样例输出有错误)
- 24.从单向链表中删除指定值的节点
- 单向链表(二) 删除指定位置的节点
- [编程题]从单向链表中删除指定值的节点
- 数据结构和算法设计专题之---单链表中在指定的节点前面插入以及删除一个节点
- 0(1)时间删除带头节点单链表指定节点。