设单链表的表头指针为h,链表中结点构造为(data,next),其中data域为字符型,链表长度为n。编写算法判断该链表的n个字符是否中心对称。(例如xyx,xyyx都是中心对称。)

admin2013-12-31  36

问题 设单链表的表头指针为h,链表中结点构造为(data,next),其中data域为字符型,链表长度为n。编写算法判断该链表的n个字符是否中心对称。(例如xyx,xyyx都是中心对称。)

选项

答案int Centrosymmetric(LinkList h,int n){ char s[];int i=1; //i记结点个数,s字符栈 LNode*p=h->next; //p是链表的工作指针,指向待处理的当前元素 for(i=1;i<=n/2;i++){ //链表前一半元素进栈 s[i]=p->data; p=p->next; } i--; //恢复最后的i值 if(n%2==1)p=p->next; //若n是奇数,后移过中心结点 while(p! =NULL&&s[i]==p->data){//测试是否中心对称 i--: p=P->next: } if(p==NULL)return 1; //链表中心对称 else return 0; //链表非中心对称 } 算法中先将“链表的前一半”元素(字符)进栈。当n为偶数时,前一半和后一半的个数相同;当n为奇数时,链表中心结点字符不必比较,移动链表指针到下一字符开始比较。比较过程中遇到不相等时,立即退出while循环,不再进行比较。

解析
转载请注明原文地址:https://kaotiyun.com/show/XSxi777K
0

最新回复(0)