内容: 编写一个程序,以给定值x为基准将单链表分割为两部分,所有小于x的结点排在大于或等于x的结点之前。你应当 保留 两个分区中每个节点的初始相对位置。
void Split(LinkNode *&L, ElemType x)
{
if(L->next==NULL)
return;//没有元素或者只有一个元素
LinkNode* pre_p=L;
LinkNode* p=L;
while(p->next!=NULL)
{
pre_p=p;
p=p->next;
if(p->data>=x)
break;
}//找到第一个大于x元素的结点
LinkNode* end=p;//大于x的末尾指针
LinkNode* q=p;//一直移动小于x的指针
while(q->next!=NULL)
{
q=q->next;
if(q->data<x)
{
pre_p->next=q;
end->next=q->next;
q->next=p;
pre_p=q;
q=end;
}
else
{
end=q;
}
}
}