C语言删除单链表中相同的数据
时间: 2024-10-09 07:02:01 浏览: 55
在C语言中,删除单链表中所有相同数据的操作可以通过遍历链表并利用指针链接节点的方式来完成。以下是基本的步骤:
1. 定义结构体`ListNode`表示链表节点,包含一个整型数据`data`和指向下一个节点的指针`next`。
```c
typedef struct ListNode {
int data;
struct ListNode* next;
} ListNode;
```
2. 创建一个函数`deleteDuplicates`,它接受链表头节点作为参数。
```c
void deleteDuplicates(ListNode* head) {
if (head == NULL || head->next == NULL) {
return; // 如果链表为空或只有一个元素,无需删除
}
ListNode* current = head;
while (current != NULL) {
ListNode* runner = current->next;
while (runner != NULL) {
if (current->data == runner->data) { // 如果当前节点值等于运行者节点值
ListNode* temp = runner; // 临时保存需要删除的节点
runner = runner->next; // 更新运行者节点到下一个
free(temp); // 释放内存,并将当前节点的next指向前一个节点
current->next = runner; // 当前节点的next跳过已删除的节点
} else {
runner = runner->next;
}
}
current = current->next;
}
}
```
这个函数会遍历整个链表,如果遇到相同的节点,就直接跳过它,通过`free`释放不需要的内存,同时更新当前节点的`next`指针指向下一个非重复节点。
阅读全文