程序填空删除单链表中重复结点,重复结点只保留一个,head是单链表首结点指针
struct node "delete(struct node *head)
(
struct node *p,"q,"r,*tmp; //r指向q的前驱结点
p=q=head; 2
for(p=head; _;p=p-> next)
r=p;
for(q=p->next;q!=NULL;)
if(q->x==p->x)
tmp=q;
q=q->next;
free(tmp);)
else
(r=q;
//返回删除重复结点的单链表头
供参考:
struct node* deleteDup(struct node* head)
{
struct node* p, * q, * r, * tmp; //r指向q的前驱结点
p = q = NULL;
for (p = head; p != NULL; p = p->next) {
r = p;
for (q = p->next; q != NULL;)
if (q->x == p->x) {
tmp = q;
q = q->next;
r->next = q;
free(tmp);
}
else {
r = q;
q = q->next;
}
}
return head;//返回删除重复结点的单链表头
}
你的代码一半 看不懂 然后这个思路其实很简单 就是保存当前节点,判断下个节点和当前节点值是否一样,如果一样,让当前节点的next指向下个节点的next(这里提前要保存一下这个要删除的节点),然后对要删除的节点进行释放。