1. 程式人生 > >CVTE筆試題目--刪除連結串列中的重複元素

CVTE筆試題目--刪除連結串列中的重複元素

題目描述:有時候列表中的重複元素佔用空間但是並沒有什麼作用,請實現下列函式幫忙刪除有序連結串列中的重複元素。只保留第一個出現的元素。

輸入樣例:1->2->2->4->4->4->5->6->6->7
輸出樣例:1->2->4->5->6->7

解題思路:使用一個hash陣列來標記連結串列中元素是否出現,這樣即使出現重複元素,標記的是該元素是否出現,這樣就將重複的元素過濾掉。之後清空連結串列,因為是順序連結串列,從0索引開遍歷整個hash陣列。將hash陣列中標記為true所對應的索引push_back到連結串列中即可。

void RemoveRedundant(list<int>& l){
	int len = l.size();
	vector<bool> arr(len,false);
	for(auto it=l.begin();it!=l.end();++it){
		arr[*it] = true;
	}
	l.clear();
	for(int i=0;i<arr.size();++i){
		if(arr[i]==true){
			l.push_back(i);
		}
	}
}