1 10 鍊錶去重 20分

2021-10-10 08:07:20 字數 1563 閱讀 8076

給定乙個帶整數鍵值的鍊錶 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

花了很長時間去思考這道題,最後還是在參考了韓旭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,還有被刪除的鍊...