ist *q,*t;Р q=p;Р while(q->next->next!=p) //q->next不是p的前趋结点Р q=q->next;Р t=q->next; //t指向要删除结点Р q->next=p; //删除t结点Р free(t);Р}Р【例2-4】试设计实现删除单链表中值相同的多余结点的算法。Р解:该例可以这样考虑,先取开始结点的值,将它与其后的所有结点值一一比较,发现相同的就删除掉,然后再取第二结点的值,重复上述过程直到最后一个结点。Р设单链表(其类型为LinkList)的头指针head指向头结点,则可按下列步骤执行:Р首先,用一个指针p指向单链表中第一个表结点,然后用另一个指针q查找链表中其余结点元素,由于是单链表,故结束条件为p= =NULL,同时让指针s指向q所指结点的前趋结点,当查找到结点具有Рq->data= =p->data时删除q所指的结点,然后再修改q,直到q为空;然后使p指针后移(即p=p->next),重复进行,直到p为空时为止。算法描述如下:Рdel(LinkList *head)Р{ //删除单链表中值相同的多余结点Р LinkList *p, *s, *q;Р p=head->next;Рwhile(p!=NULL && p->next!=NULL)Р{ s=p; //s指向要删除结点的前趋Рq=p->next;Р while (q!=NULL)Р{ if (q->data= =p->data)} //查找值相同的结点并删除Р { s->next=q->next;Р free(q);Р q=s->next;Р }Р else Р { s=q;Р q=q->next;Р }Р }Рp=p->next;Р}Р}Р习题2Р一、单项选择题Р1. 线性表是________。1.A РA.一个有限序列,可以为空 B.一个有限序列,不可以为空