鏈結 :
題目內容:
給定乙個帶整數鍵值的單鏈表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...