需要各位的帮助,需要解题思路!

程序填空删除单链表中重复结点,重复结点只保留一个,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(这里提前要保存一下这个要删除的节点),然后对要删除的节点进行释放。