L2 002 鍊錶去重 模擬鍊錶

2021-09-13 12:24:18 字數 1422 閱讀 8758

l2-002 鍊錶去重 (25 分)

給定乙個帶整數鍵值的鍊錶 l,你需要把其中絕對值重複的鍵值結點刪掉。即對每個鍵值 k,只有第乙個絕對值等於 k 的結點被保留。同時,所有被刪除的結點須被儲存在另乙個鍊錶上。例如給定 l 為 21→-15→-15→-7→15,你需要輸出去重後的鍊錶 21→-15→-7,還有被刪除的鍊錶 -15→15。

輸入在第一行給出 l 的第乙個結點的位址和乙個正整數 n(≤10​5​​,為結點總數)。乙個結點的位址是非負的 5 位整數,空位址 null 用 −1 來表示。

隨後 n 行,每行按以下格式描述乙個結點:

首先輸出去重後的鍊錶,然後輸出被刪除的鍊錶。每個結點佔一行,按輸入的格式輸出。

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

一開始寫這個題目的時候,一看是(鍊錶,我看還是算了吧,c語言鍊錶學的太差了,這25分就丟了,可惜)模擬賽後,很多是用陣列結構體來模擬的。能用陣列模擬就模擬,畢竟我的鍊錶很差,我說一說這個模擬的思路,以前有過乙個題目也是這樣模擬,沒有記住。

我說說這個模擬,想要將乙個 串連下去,我們需要知道第乙個位址,和下乙個位址。我們需要乙個結構體(可能會有其他的資料在這個節點)來儲存這些資訊。但是這個點的位址怎麼弄呢?我們還有這個 結構體的下標還沒有用呢(畢竟 0~n 這個資料毫無意義,我們就將這個下標徵用,用作本節點的位址。將資料輸入這個位址下標的結構體當中。但是怎麼 一連串的輸出呢 ?這裡就有乙個技巧(可能我太菜了,見識不廣) ,就是 用這個i 表示位址,這次迴圈完後,i就被賦值下乙個位址,直到 -1資料的 那個終止資料,這樣就連成乙個串了(心想好妙,我太菜了,還是要多刷題,來增加見識)。 

還有乙個點,在處理重複資料節點時,我們需要再來乙個其他陣列或者容器來暫時裝一下這個節點資料,然後在外面再按順序輸出。        

get it、

#include#includeusing namespace std;

const int maxn=1e5+10;

struct

d[maxn];

vectorans1;

vectorans2;

int vis[maxn];

int main()

for(int i=head;i!=-1;i=d[i].next)

else

}for(int i=0;ifor(int i=0;ireturn 0;

}

L2 002 鍊錶去重 模擬

給定乙個帶整數鍵值的單鏈表l,本題要求你編寫程式,刪除那些鍵值的絕對值有重複的結點。即對任意鍵值k,只有鍵值或其絕對值等於k的第乙個結點可以被保留。同時,所有被刪除的結點必須被儲存在另外乙個鍊錶中。例如 另l為21 15 15 7 15,則你必須輸出去重後的鍊錶21 15 7 以及被刪除的鍊錶 15...

L2 002 鍊錶去重 模擬

時間限制 300 ms 記憶體限制 65536 kb 長度限制 8000 b 判題程式 standard 作者陳越 給定乙個帶整數鍵值的單鏈表l,本題要求你編寫程式,刪除那些鍵值的絕對值有重複的結點。即對任意鍵值k,只有鍵值或其絕對值等於k的第乙個結點可以被保留。同時,所有被刪除的結點必須被儲存在另...

L2 002 鍊錶去重

給定乙個帶整數鍵值的單鏈表l,本題要求你編寫程式,刪除那些鍵值的絕對值有重複的結點。即對任意鍵值k,只有鍵值或其絕對值等於k的第乙個結點可以被保留。同時,所有被刪除的結點必須被儲存在另外乙個鍊錶中。例如 另l為21 15 15 7 15,則你必須輸出去重後的鍊錶21 15 7 以及被刪除的鍊錶 15...