}
p=p->next; }//while
pa->next=A;pb->next=B; //循环链表 }//Divide_LinkedPoly
补充题:
1 下述算法的功能是什么?
LinkList Demo(LinkList L){ // L 是无头结点单链表 ListNode *Q,*P; if(L&&L->next){
Q=L;L=L->next;P=L;
while (P->next) P=P->next; P->next=Q; Q->next=NULL; }
return L; }// Demo 答:
该算法的功能是:将开始结点摘下链接到终端结点之后成为新的终端结点,而原来的第二个结点成为新的开始结点,返回新链表的头指针。
2 写一算法将单链表中值重复的结点删除,使所得的结果表中各结点值均不相同。 解:
本题可以这样考虑,先取开始结点中的值,将它与其后的所有结点值一一比较,发现相同的就删除掉,然后再取第二结点的值,重复上述过程直到最后一个结点。
具体算法:
void DeleteList ( LinkList L ) {
ListNode *p , *q , *s; p=L-next;
while( p->next&&p->next->next) {
q=p;//由于要做删除操作,所以q指针指向要删除元素的直接前趋 while (q->next)
if (p->data==q->next->data)
{s=q->next;q->next=s->next;free(s);//删除与*p的值相同的结点 }
else q=q->next; p=p->next; } }