删除已排序链表中重复的元素,使得每个元素只出现一次
例如输入:1 -> 2 -> 2 -> 3
输出:1 ->2 -> 3
算法思路:
- 表中并没有说明带有头结点,设头指针L,首结点p(指针为L)
- 遍历整个表,进入循环体:拿当前结点与后继结点进行对比,如果二者相同,直接删除这个后继结点,这样使得每个元素只出现一次;
- 如果二者不相同,把当前指针p顺序后移;
void delete_duplicates(LinkList &L){
ListNode* p =L;
ListNode* q;
/*这里解释下循环的限制:当链表不为空,
并且当前不为尾节点(最大为尾节点的前驱结点,当此时为尾节点的前驱时,
直接将当前结点p置为尾节点,因为此时p->next=NULL*/
while (p != NULL && p->next != NULL){
if (p->data == p->next->data){
q = p->next; //用于释放内存空间
p->next = p->next->next;
free(q);
}else{
p = p->next;
}
}
}