已知线性表的元素以递增有序排列,并且单链表存储。试写一高效的算法,删除表中所有值相同的元素。(只留下不同元素)
时间: 2023-04-18 08:00:36 浏览: 107
已知线性表中的元素以值递增有序排列,并以单链表作存储结构。试写一高效的算法,删除表中所有值相同的多余元素(使得操作后的线性表中所有元素的值均不相同)
可以使用双指针法,一个指针p指向当前不重复的元素,另一个指针q用于遍历整个链表。当p和q指向的元素值相同时,q继续向后遍历;当p和q指向的元素值不同时,将p的下一个节点指向q,然后p指向下一个节点,继续遍历。最后,将p的下一个节点置为NULL,即可删除所有重复元素。
具体实现如下:
void deleteDuplicates(ListNode* head) {
if (head == NULL) return;
ListNode* p = head;
ListNode* q = head->next;
while (q != NULL) {
if (p->val == q->val) {
q = q->next;
} else {
p->next = q;
p = p->next;
q = q->next;
}
}
p->next = NULL;
}
阅读全文