pta2-3 链表去重c语言
时间: 2024-10-11 16:10:56 浏览: 2
pta2-3 链表去重通常是指在一个单链表中移除所有重复的节点,保持链表中元素唯一。在C语言中,你可以通过遍历链表并维护一个哈希集合(如`unordered_set`或`stdbool`数组)来完成这个任务。下面是基本的步骤:
1. 定义一个结构体表示链表节点,包含数据`data`和指向下一个节点的指针`next`。
```c
typedef struct Node {
int data;
struct Node* next;
} ListNode;
```
2. 创建一个辅助函数用于检查数据是否已存在于哈希集合中。这里我们可以使用`bool`类型的数组。
```c
bool isDuplicate(int data, bool hash[1000]) {
return hash[data];
}
```
3. 主函数中,初始化空链表和哈希集合,然后开始遍历链表。
```c
ListNode* removeDuplicates(ListNode* head) {
if (head == NULL || head->next == NULL) {
return head;
}
bool hash[1000] = {false};
ListNode* current = head;
while (current != NULL) {
if (!isDuplicate(current->data, hash)) {
hash[current->data] = true; // 添加当前节点到哈希集合
}
ListNode* temp = current->next;
if (temp != NULL && temp->data == current->data) {
// 如果找到重复项,删除它
current->next = temp->next;
} else {
current = temp;
}
}
return head;
}
```
4. 最后返回处理后的链表头节点。