1. 程式人生 > >從單向連結串列中刪除指定值的節點(OJ 不用看這題)

從單向連結串列中刪除指定值的節點(OJ 不用看這題)

題目

描述

輸入一個單向連結串列和一個節點的值,從單向連結串列中刪除等於該值的節點,刪除後如果連結串列中無節點則返回空指標。

連結串列結點定義如下:

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; }