用C语言实现删除单链表的重复结点
时间: 2024-10-07 16:08:43 浏览: 82
在C语言中,我们可以使用链表(Linked List)数据结构来实现删除单链表中的重复元素。这里提供一个基础的示例,假设我们有一个包含整数的单向链表,每个节点有两个属性:值(value)和指向下一个节点的指针(next)。
```c
#include <stdlib.h> // 包含malloc和free
// 定义链表节点结构体
typedef struct Node {
int value;
struct Node* next;
} Node;
// 删除重复节点的函数
Node* removeDuplicates(Node* head) {
if (head == NULL || head->next == NULL) { // 如果链表为空或只有一个元素
return head;
}
Node* current = head;
while (current != NULL) {
Node* runner = current; // 使用runner追踪当前元素之后的唯一非重复项
while (runner->next != NULL && runner->next->value == current->value) { // 找到下一个相同的节点
runner = runner->next; // 移动runner到下一个非重复节点
}
if (runner->next != NULL) { // 如果找到了不同的节点,将current的next指向这个新节点
current->next = runner->next;
} else { // 如果current后的所有节点都是重复的,那么将其移除
Node* temp = current->next;
free(current);
current = temp; // current向前移动一位
}
current = current->next;
}
return head;
}
```
上述代码会遍历链表,每当遇到重复的节点时,就跳过它们直到找到不同的节点。如果遍历完剩下的全是重复节点,则逐个删除它们。
阅读全文