C语言删除顺序表中相同的元素
时间: 2024-11-20 11:35:22 浏览: 19
在C语言中,删除顺序表(如数组或链表)中的相同元素通常涉及到遍历列表,对于每个元素,检查它是否等于前一个元素,如果相等则将其删除。这里我将简述一种基于链表的例子:
**链表示例:**
假设我们有一个单链表`struct Node`的结构体表示节点,包含一个数据域`data`和一个指向下一个节点的指针`next`。
```c
typedef struct Node {
int data;
struct Node* next;
} Node;
```
删除相同元素的过程可以这样实现:
```c
void deleteDuplicates(Node** head) {
if (*head == NULL) return; // 如果链表为空,直接返回
Node* current = *head;
Node* temp = NULL;
while (current != NULL && current->next != NULL) {
if (current->data == current->next->data) {
Node* oldNext = current->next;
current->next = current->next->next;
free(oldNext); // 释放已删除的节点内存
} else {
temp = current;
current = current->next;
}
}
// 检查最后一个元素是否有重复
if (current != NULL && current->data == temp->data) {
free(current);
}
}
```
这个函数接受一个指向头节点的指针,并通过迭代链表,每次比较当前节点的数据与下一个节点的数据。如果发现重复,就更新当前节点的`next`指针跳过重复部分,并释放旧节点。最后,还要检查链表尾部是否存在重复。
**
阅读全文