无序单链表的去重c++
时间: 2023-10-17 15:02:43 浏览: 174
无序单链表的去重操作可以使用哈希表来实现。具体步骤如下:
1. 定义一个哈希表,用于记录链表中已经出现过的元素。
2. 遍历链表节点,对于每个节点,首先在哈希表中查找该节点的值是否存在。
3. 如果哈希表中已存在该值,则说明链表中已经有相同的元素,将该节点从链表中删除;如果哈希表中不存在该值,则将该值添加到哈希表中,继续遍历下一个节点。
4. 最终,遍历完整个链表后,链表中的重复元素都已经被删除。
具体实现的代码如下所示:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构
struct ListNode {
int val;
struct ListNode* next;
};
void removeDuplicates(struct ListNode* head) {
if (head == NULL) {
return;
}
// 定义哈希表
int hashSet[1000] = {0};
struct ListNode* pre = head;
struct ListNode* cur = head->next;
// 遍历链表节点
while (cur != NULL) {
// 如果哈希表中已存在该值,则删除当前节点
if (hashSet[cur->val] != 0) {
pre->next = cur->next;
free(cur);
cur = pre->next;
} else { // 否则将该值添加到哈希表中
hashSet[cur->val] = 1;
pre = cur;
cur = cur->next;
}
}
}
// 创建一个链表节点
struct ListNode* createNode(int val) {
struct ListNode* node = (struct ListNode*)malloc(sizeof(struct ListNode));
node->val = val;
node->next = NULL;
return node;
}
// 打印链表
void printList(struct ListNode* head) {
struct ListNode* cur = head;
while (cur != NULL) {
printf("%d ", cur->val);
cur = cur->next;
}
printf("\n");
}
int main() {
// 创建链表示例:1->2->3->2->4->3
struct ListNode* head = createNode(1);
head->next = createNode(2);
head->next->next = createNode(3);
head->next->next->next = createNode(2);
head->next->next->next->next = createNode(4);
head->next->next->next->next->next = createNode(3);
printf("原始链表:");
printList(head);
removeDuplicates(head);
printf("去重后的链表:");
printList(head);
return 0;
}
```
以上代码就可以实现对无序单链表进行去重操作。
阅读全文