思路:分别使用两个指针p和q, 因为可能q->val==p->val时,此时要删除q所指向的节点,所以需要一个s指针记录q,防止发生断链。
struct node {
int val;
node *next;
};
void delDuplication(node *head) {
for (node *p=head->next; p; p->next) {
for (node *q=p->next, *s=q; q) {
if (p->val == q->val) {
//删除q
s->next = q->next;
delete q;
q = s->next;
} else {
s = q;
q = q->next;
}
}
}
}
本文介绍了一种链表去重的算法实现,通过双指针p和q遍历链表,利用s指针辅助,当发现重复元素时,通过s指向q的下一节点并释放q节点,从而实现在O(n^2)时间复杂度下删除链表中所有重复元素。

456

被折叠的 条评论
为什么被折叠?



