L2 002 鍊錶去重 模擬

2021-08-17 16:11:17 字數 1763 閱讀 8667

給定乙個帶整數鍵值的單鏈表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...