题目: 删除链表中值相同的多余结点
算法思想:遍历整个链表,每个结点都要和其后面的结点进行对比。定义结点p遍历整个链表,结点q遍历p之后的所有元素。(出自2019-2)
核心代码
LNode *Delete(LNode *head) {
LNode *p, *q, *r; //结点r是个中介结点
p = head->next; //此时p为链表的第一个元素(当此链表含有头结点时,若无头结点,p=head)
while (p) { //p遍历整个链表
q = p; //q遍历p之后的所有元素
while (q->next) {
if (q->next->data == p->data) { //当p之后某个元素值与p相同时
r = q->next;
q->next = r->next;
free(r);
} else
q = q->next;
}
p = p->next;
}
return head;
}