本题的思路为:先通过一次遍历找到最大值,然后第二次的遍历过程中将最大值的结点移动到尾部。在进行移动中先判断最大值是否在尾部,如果在尾部,则不需要进行操作。
void MoveMaxToTail (LinkList head)
{
PNode pmax,p,pre,end;
pmax=head->next;
p=head->next->next;
while(p)
{
if(p->data>pmax->data)
{
pmax=p;
}
p=p->next;
}
if(pmax->next==NULL)
{
return 0;
}
else
{
p=head;
while(p)
{
if(p->next==pmax)
pre=p;
if(p->next==NULL)
end=p;
p=p->next;
}
pre->next=pmax->next;
pmax->next=end->next;
end->next=pmax;
}
}
测试结果如下