從單向連結串列中刪除指定值的節點(OJ 不用看這題)
阿新 • • 發佈:2019-02-06
題目
描述
輸入一個單向連結串列和一個節點的值,從單向連結串列中刪除等於該值的節點,刪除後如果連結串列中無節點則返回空指標。
連結串列結點定義如下:
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;
}