L2 008 鍊錶去重 兩種方法

2021-07-29 01:31:39 字數 1605 閱讀 8126

鏈結 :

題目內容:

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

用陣列下標存放 結點的id,可以迅速訪問到該結點。因為題目的結點id在100000之內,所以開陣列這個方法還是很有效的

*方法一 2017-3-23 9:59

#include#include#includeusing namespace std;

struct node

}a[110001];//開乙個陣列存放結點,題目要求的id在0~99999之間,所以這個陣列的大小110001足夠放了

int node1[110001],node2[110002];//node1存放主煉表中結點的id,node2存放刪除的結點id

int main()

f[100001],list1[100001],list2[100001];

struct cmp };

mapm;

map::iterator it;

sets;

set::iterator itt;

int main()

it=m.find(a);

int j=0,k=0;

while(1)

else

if(strcmp(it->second.next,"-1")==0)

it=m.find(it->second.next);

} if(j>1)

printf("%s\n%s %d -1\n",list2[i].id,list2[i].id,list2[i].key);

}else if(k==1)

return 0;

}

下標也可以作為某種資訊的儲存,在有些時候可以節省記憶體,也可以節省搜尋時間。

加油,渣科

陣列去重(至少兩種方法)js

新建乙個陣列,遍歷去要重的陣列,當值不在新陣列的時候 indexof為 1 就加入該新陣列中。方法1 普通版,利用indexof去重 function arrayunique arr return res var arr 1,1,hi true true true,15,15,15 console....

js陣列去重的兩種方法

陣列去重這種問題經常會遇到,解決方法也有很多,這裡就總結兩種比較常用的方法。方法一第一種方法的思路 遍歷陣列裡的元素,由第乙個元素開始依次按照順序與其後面的元素相比較,如果不同則不用管,相同則把其後所被比較的元素去除。這樣所有元素迴圈一遍,陣列中重複的元素就能全部去除。var arr 1,5,7,6...

L2 002 鍊錶去重

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