作业1-2+ 实验1(6) 下载本文

}

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; } }