給定乙個帶整數鍵值的單鏈表l,本題要求你編寫程式,刪除那些鍵值的絕對值有重複的結點。即對任意鍵值k,只有鍵值或其絕對值等於k的第乙個結點可以被保留。同時,所有被刪除的結點必須被儲存在另外乙個鍊錶中。例如:另l為21→-15→-15→-7→15,則你必須輸出去重後的鍊錶21→-15→-7、以及被刪除的鍊錶-15→15。
輸入格式:
輸入第一行包含鍊錶第乙個結點的位址、以及結點個數n(<= 105 的正整數)。結點位址是乙個非負的5位整數,null指標用-1表示。
隨後n行,每行按下列格式給出乙個結點的資訊:
address key next
輸出格式:
首先輸出去重後的鍊錶,然後輸出被刪除結點組成的鍊錶。每個結點佔一行,按輸入的格式輸出。
輸入樣例:
00100 5
99999 -7 87654
23854 -15 00000
87654 15 -1
00000 -15 99999
00100 21 23854
輸出樣例:
00100 21 23854
23854 -15 99999
99999 -7 -1
00000 -15 87654
87654 15 -1
分析:模擬一下 過程就好了,當時比賽怎麼都是19分,-_-|| 。
**
#include
using
namespace
std;
#define ll long long
const
int n = 2e5+11;
const
int m = 1e6+11;
const
int mod = 1e9+7;
const
int inf = 0x3f3f3f3f;
const ll inff = 0x3f3f3f3f3f3f3f3f;
struct node
node(int _from,int _val,int _to)
}node[n];
int head[n],top; // head[id] 表示 位址為id的結點在node中是第幾個元素
vector
ans;
vector
ve;int main()
vis[abs(e.val)]=1;
ve.push_back(e.from);
i=e.to;
}for(int i=0;i// 重新分配 後繼位址
if(i==ve.size()-1)
int u=ve[i]; int v=ve[i+1];
node[head[u]].to=node[head[v]].from;
}for(int i=0;i// 重新分配 後繼位址
if(i==ans.size()-1)
int u=ans[i]; int v=ans[i+1];
node[head[u]].to=node[head[v]].from;
}for(int i=0;iif(i==ve.size()-1)
printf("%05d %d %05d\n",now.from,now.val,now.to);
}for(int i=0;iif(i==ans.size()-1)
printf("%05d %d %05d\n",now.from,now.val,now.to);
}return
0;}
L2 002 鍊錶去重 模擬
時間限制 300 ms 記憶體限制 65536 kb 長度限制 8000 b 判題程式 standard 作者陳越 給定乙個帶整數鍵值的單鏈表l,本題要求你編寫程式,刪除那些鍵值的絕對值有重複的結點。即對任意鍵值k,只有鍵值或其絕對值等於k的第乙個結點可以被保留。同時,所有被刪除的結點必須被儲存在另...
L2 002 鍊錶去重 模擬鍊錶
l2 002 鍊錶去重 25 分 給定乙個帶整數鍵值的鍊錶 l,你需要把其中絕對值重複的鍵值結點刪掉。即對每個鍵值 k,只有第乙個絕對值等於 k 的結點被保留。同時,所有被刪除的結點須被儲存在另乙個鍊錶上。例如給定 l 為 21 15 15 7 15,你需要輸出去重後的鍊錶 21 15 7,還有被刪...
L2 002 鍊錶去重
給定乙個帶整數鍵值的單鏈表l,本題要求你編寫程式,刪除那些鍵值的絕對值有重複的結點。即對任意鍵值k,只有鍵值或其絕對值等於k的第乙個結點可以被保留。同時,所有被刪除的結點必須被儲存在另外乙個鍊錶中。例如 另l為21 15 15 7 15,則你必須輸出去重後的鍊錶21 15 7 以及被刪除的鍊錶 15...