问答题
已知p是指向单向循环链表最后一个结点的指针,试编写只包含一个循环的算法,将线性表(a
1
,a
2
,…,a
n-1
,a
n
)改造为(a
1
,a
2
,…,a
n-1
,a
n
,a
n-1
,…,a
2
,a
1
)。【北京理工大学2005十四、1(5分)】
【正确答案】正确答案:题的结果链表是以a
n
为对称的。由尾指针p找到第一元素结点,复制结点并插入原尾结点的后面。同样处理其他结点。要记住结点a
1
的指针,最后将尾指针P指向结点a
1
,形成新的单向循环链表。核心语句段如下: q:p一>next; //q指向a1结点 t=new(LNode);t一>data:q一>data;r=t; //申请并复制结点,r记住a
1
结点的指针 t一>next=P一>next;P一>next:t; //先将a1结点放到正确位置 q=q一>next; //从a2结点开始 while(q!=p) (s=q一>next;t&new(LNode);t一>data=q一>data; //暂存后继,申请并复制结点 t一>next=p一>next;P一>next=t;q=s; //对称插入放置,恢复待处理结点 } p=r;//修改尾指针
【答案解析】