带头节点的单链表中删除值重复节点,c语言
时间: 2024-12-14 15:17:27 浏览: 24
在C语言中,删除带头节点的单链表中值重复的节点可以采用迭代的方式来实现。这里是一个简单的步骤描述:
1. 定义一个指针`current`初始化为链表的头节点。
2. 创建两个临时变量`prev`和`temp`,用于存储当前节点的前一个节点和当前查找的节点。
3. 当`current`非空时,进入循环:
a. 检查`current`的值是否等于`prev`的值,如果相等,则需要删除它。
b. 如果它们不同,将`prev`更新为`current`,准备检查下一个节点。
c. 将`current`移到下一个节点。
4. 删除节点的操作:如果`current`是需要删除的重复节点(即`prev`不为空且它们的值相等),则只需将`prev`的`next`指向`current->next`即可。
```c
typedef struct Node {
int data;
struct Node* next;
} Node;
void deleteDuplicates(Node** head) {
if (*head == NULL) return; // 空链表无需处理
Node* current = *head;
Node* prev = NULL;
while (current != NULL) {
Node* temp = current->next;
if (current->data == prev->data) {
// 删除重复节点
if (prev != NULL) {
prev->next = temp;
} else { // 如果头节点就是重复节点
*head = temp;
}
} else {
// 更新prev和current
prev = current;
}
// 移动到下一个节点
current = temp;
}
}
```
阅读全文