13.删除单链表中重复的元素
2012-09-24 21:22
363 查看
思路:
使用哈希表。
从头扫描,将出现过的节点存入哈希表中。
如果元素已经在哈希表中出现过则删除,没有则存入。
注意:
删除时需要知道前一节点。
我使用的链表中存储的是char型变量,所以哈希表即为含有256个元素的数组。
如果存储的是其他数据类型,则可以使用stl中的hash_set容器。
使用哈希表。
从头扫描,将出现过的节点存入哈希表中。
如果元素已经在哈希表中出现过则删除,没有则存入。
注意:
删除时需要知道前一节点。
我使用的链表中存储的是char型变量,所以哈希表即为含有256个元素的数组。
如果存储的是其他数据类型,则可以使用stl中的hash_set容器。
// LinkTable.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <iostream> #include <string> using namespace std; //链表的结构体 struct node { char val; node * next; }; //建立链表 struct node * create( string & str_link ) { int len = str_link.length(); struct node * phead = new node(); //带有表头的链表,表头中不存储任何元素 struct node * preNode = phead; for( int i=0; i<len; i++ ) { struct node * pNode = new node(); pNode->val = str_link[i]; pNode->next = NULL; preNode->next = pNode; preNode = pNode; } return phead; } //输出链表 void out_link( struct node * phead ) { if( phead == NULL ) return; struct node * pNode = phead->next; while( pNode ) { cout <<pNode->val; pNode = pNode->next; } cout << endl; } //去掉重复元素 void delete_repeat_element( struct node * phead ) { if( !phead || !phead->next ) return; int * hashTable = new int[256](); //加括号是为了将hashTable中所有元素初始化为0 struct node * pNode = phead->next; struct node * pPreNode = phead; while( pNode ) { if( hashTable[pNode->val] !=0 ) //说明已经出现过,该结点要删除 { pPreNode->next = pNode->next; delete pNode; //删除结点 pNode = pPreNode->next; } else //没有出现过,则置出现标记 { hashTable[pNode->val] = 1; pPreNode = pNode; pNode = pNode->next; } } delete [] hashTable; //释放资源 } void test() { string str; cout << "Input the link table :"<<endl; cin >> str; struct node *phead = create( str ); delete_repeat_element( phead ); cout<< "The result is:" <<endl; out_link( phead ); } int _tmain(int argc, _TCHAR* argv[]) { test(); return 0; }
相关文章推荐
- 数据结构——链表之单链表重复元素的删除
- 删除单链表中重复的元素
- 非递减单链表删除重复元素
- 利用单链表删除重复元素
- 单链表中重复元素的删除
- 删除单链表中的重复元素
- 删除单链表中重复的元素
- 数据结构之 线性表---单链表的操作B(先逆序+再删除重复元素)
- 数据结构之 线性表---单链表的应用(重复元素删除)
- 删除单链表中的重复元素
- LeetCode.83. Remove Duplicates from Sorted List(删除单链表中的重复元素)
- 删除单链表中重复的元素
- 删除单链表中重复的元素
- STL—vector删除重复元素
- 【1139】数据结构上机测试2-2:单链表操作B (逆序建表+重复元素删除)
- 数据结构实验之链表七:单链表中重复元素的删除
- 数据结构实验之链表七:单链表中重复元素的删除
- 数据结构实验之链表七:单链表中重复元素的删除
- 数据结构实验之链表七:单链表中重复元素的删除
- 数据结构实验之链表七:单链表中重复元素的删除