设计在单链表中删除相同的多余结点的算法
时间: 2024-09-27 16:15:05 浏览: 34
在单链表中删除所有相同的多余节点,通常采用遍历链表的方式,同时维护一个临时节点或者称为“已检查”的指针。以下是算法步骤:
1. 首先,创建一个指向头节点的指针 `current` 和一个用于存放当前值的变量 `tempValue`。
2. 使用 `current` 指针遍历链表,开始比较 `current->data` 与 `tempValue` 是否相等。如果它们不相等,将 `tempValue` 更新为 `current->data` 并将 `tempNode` 设置为 `current`,然后继续遍历。
3. 如果遇到相等的节点(`current->data == tempValue`),则不将当前节点添加到新链表中,并更新 `current` 为下一个节点,跳过重复的节点。
4. 当遍历完链表后,将 `tempNode` 点作为新的链表头节点,因为这是第一个不重复的节点。
5. 将原链表的头节点设为新链表的头节点,完成删除过程。
```cpp
struct Node* deleteDuplicates(struct Node* head) {
if (!head || !head->next) return head;
tempNode = head;
tempValue = head->data;
while (current = current->next) {
if (current->data != tempValue) {
tempNode->next = current;
tempNode = current;
tempValue = current->data;
}
}
tempNode->next = nullptr; // 如果最后一个节点也是重复的,则需要单独处理
return head;
}
```
阅读全文