PTA 鍊錶去重

2021-10-02 08:28:55 字數 1722 閱讀 8326

題目重述

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

輸入格式:

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

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

輸出格式:

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

輸入樣例:

00100

599999-7

87654

23854-15

00000

8765415-

100000-15

99999

00100

2123854

輸出樣例:
00100

2123854

23854-15

99999

99999-7

-100000-15

87654

8765415-

1

題目思想

如果碰到的值沒有被訪問過,就標記一下這個值是訪問過的,並且提前將這個結點資訊存起來。如果碰到的值訪問過,就使用另外乙個陣列存起來。

需要注意的是,這道題,後幾個測試點的資料量都比較大,一般沒問題,但是存放節點資訊用結構體陣列就可以,不要用map,我之前不知道為什麼覺得map方便,導致最後幾個測試點超時,最後換回了結構體陣列,才ac。

我真菜啊

c++ ac

#include

#include

using

namespace std;

struct node

;node nds[

100005];

int v1[

100005];

//存放刪去的

int v2[

100005];

//存放未被刪去的

bool isvisit[

10005];

intmain()

int p=l;

int loc1=

0,loc2=0;

while

(true

)else

if(nds[p]

.next==-1

) p=nds[p]

.next;

}//將之前提前存起來的結點的下一站進行更新

for(

int i=

0; i)else

//如果下一站是-1,則不需要滿足5位補0

if(nds[v2[i]

].next==-1

)else

}//將之前提前存起來的結點的下一站進行更新

for(

int i=

0; i)else

//如果下一站是-1,則不需要滿足5位補0

if(nds[v1[i]

].next==-1

)else

}return0;

}

鍊錶去重(PTA)

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

PTA 鍊錶去重 C語言

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

PAT鍊錶去重

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