[说明] 若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 ( (1) ) printf ( "error\n") ;
else
while p ! = NULL && t1! = NULL)
if ( p- >data = = t1 - >data)
p = p- >link;
t1 = t1- >link;
else
(2)
p = prior - > link;
t1 = t- >link;
if ( t1 ! : NULL) printf ("cannot find");
else
(3)
r = q- >link;
q- >link = p;
while (r ! = p)
u = r- >link;
(4)
q=r;
r = u;
(5)
参考答案:(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的前面,再将该子串的第二个结点链接到前面移动的第二个结点的前面,如此下去,便逆置了该于串。