給定乙個帶整數鍵值的鍊錶 l,你需要把其中絕對值重複的鍵值結點刪掉。即對每個鍵值 k,只有第乙個絕對值等於 k 的結點被保留。同時,所有被刪除的結點須被儲存在另乙個鍊錶上。例如給定 l 為 21→-15→-15→-7→15,你需要輸出去重後的鍊錶 21→-15→-7,還有被刪除的鍊錶 -15→15。
輸入在第一行給出 l 的第乙個結點的位址和乙個正整數 n(≤105,為結點總數)。乙個結點的位址是非負的 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
花了很長時間去思考這道題,最後還是在參考了韓旭051**後才勉強寫了出來這道題,其中小細節很多:
1.怎麼將輸入的鍊錶方便的儲存,還方便使用時找到想要的(指定位址的)鍊錶資料:使用乙個結構體來儲存鍊錶資料,直接在輸入資料時,將輸入的位址值當做lnode[i]中的i,也就是結構體的序號。
2.怎麼判斷是否有與當前資料絕對值相等的節點:設定乙個memory陣列,起到判斷是否有相等絕對值資料的作用,將memory初始化為0。遍歷時,出現乙個value值,就將memory[value]更新為1,之後如果memory[value]為0,就不刪除,如果memory[value]為1,就刪除。
#
include
using
namespace std;
struct
node
;node lnode[
100010];
intmain()
int address1[
100010
],address2[
100010
],num1 =
0,num2 =0;
int memory[
10010];
//對所有value的絕對值進行記憶
memset
(memory,0,
sizeof
(memory));
for(i =
0;i < num;i++
)else
start = lnode[start]
.next;
if(start ==-1
)//表尾就退出
break;}
for(i =
0;i < num1;i++
)for
(i =
0;i < num2;i++
)}
1 10 鍊錶去重 20 分
給定乙個帶整數鍵值的鍊錶 l,你需要把其中絕對值重複的鍵值結點刪掉。即對每個鍵值 k,只有第乙個絕對值等於 k 的結點被保留。同時,所有被刪除的結點須被儲存在另乙個鍊錶上。例如給定 l 為 21 15 15 7 15,你需要輸出去重後的鍊錶 21 15 7,還有被刪除的鍊錶 15 15。輸入在第一行...
1 10 鍊錶去重 20分
給定乙個帶整數鍵值的鍊錶 l,你需要把其中絕對值重複的鍵值結點刪掉。即對每個鍵值 k,只有第乙個絕對值等於 k 的結點被保留。同時,所有被刪除的結點須被儲存在另乙個鍊錶上。例如給定 l 為 21 15 15 7 15,你需要輸出去重後的鍊錶 21 15 7,還有被刪除的鍊錶 15 15。輸入格式 輸...
1 10 鍊錶去重 20分
1 10 鍊錶去重 20分 給定乙個帶整數鍵值的鍊錶 l,你需要把其中絕對值重複的鍵值結點刪掉。即對每個鍵值 k,只有第乙個絕對值等於 k 的結點被保留。同時,所有被刪除的結點須被儲存在另乙個鍊錶上。例如給定 l 為 21 15 15 7 15,你需要輸出去重後的鍊錶 21 15 7,還有被刪除的鍊...