📅  最后修改于: 2023-12-03 14:56:19.244000             🧑  作者: Mango
在链表中,可能会存在重复的元素。为了避免重复,我们需要从链表中删除这些重复的元素。以下是一个用于从排序链表中删除重复项的 C++ 程序。
该程序基于迭代的方式实现,它使用两个指针来遍历链表。第一个指针 current
用于迭代链表,第二个指针 prev
则始终指向元素不重复的最后一个节点。
current
指针移动到下一个节点。prev
指针移动到当前节点,并将 current
指针向下移动。prev
变量不等于当前的 current
变量,即发现了重复节点,将 prev
的 next
指针指向下一个不重复的节点。最终,该程序返回链表的头节点。以下是该程序的 C++ 代码片段:
ListNode* deleteDuplicates(ListNode* head) {
if (!head) return head;
ListNode* current = head;
while (current->next) {
if (current->val == current->next->val) {
ListNode* tmp = current->next;
current->next = current->next->next;
delete tmp;
} else {
current = current->next;
}
}
return head;
}
注意,该程序只适用于排序链表。如果链表是无序的,需要使用不同的算法来删除重复项。
以上即是用于从排序链表中删除重复项的 C++ 程序。该程序的时间复杂度为 $O(n)$,空间复杂度为 $O(1)$。它通过使用迭代的方式实现,使用两个指针遍历链表,删除重复的元素。如果您正在使用排序链表,并希望删除重复项,可以使用该程序作为参考。