填空题 [说明] 若s和t是用单链表存储的两个串,设计一个函数将s串中首次与串t匹配的字串逆置。 linkstring * invert - substring ( s, t) linkstring * s, * t; { linkstring *prior, *p, *t1, *r, *q, *u; prior =s; p=s; t1 =t; if ({{U}} (1) {{/U}}) printf ( "error/n") ; else { while { p ! = NULL && t1! = NULL) { if ( p- >data = = t1 - >data) { p = p- >link; t1 = t1- >link; } else { {{U}} (2) {{/U}} p = prior - > link; } t1 = t- >link; } if ( t1 ! : NULL) printf ("cannot find"); else { {{U}} (3) {{/U}} r = q- >link; q- >link = p; while (r ! = p) { u = r- >link; {{U}} (4) {{/U}} q=r; r = u; } {{U}} (5) {{/U}} } } }
  • 1、
【正确答案】 1、(1) p=NULL||t1=NULL    
【答案解析】(2) prior=prior->link (3) q=prior->link; (4) r->link=q; (5) prior->link=q; [解答要点] 设t和s是用带头结点的单链表表示的,首先在s串中查找首次与串t匹配的子串,若未找到,显示相应信息并返回;否则将该子中逆置,先将子串的第一个结点链接到p的前面,再将该子串的第二个结点链接到前面移动的第二个结点的前面,如此下去,便逆置了该于串。