}
13.下列程序中的函数change(node*pa,intx)的功能是:
调整pa指向的链表中结点的
位置。
根据参数X的值,使链表中各结点数据域小于X的结点放在链表的前半部,大于等于x
的结点放在链表的后半部,并将X插人这两部分结点之间。
例如,原链表上各结点的数据依次为:
3,4,2,1,9,6,5,0,10,6
输入:
X=7
经插入新结点后,新链表的各结点数据依次为:
3,4,2,1,6,5,0,6,7,9,10
[程序](4分)
#include
structnode{
intdata;
node*next;
};
node*change(node*pa,intx)
{
node*pl,*p2,*P,*q;
pl=p2=pa;
p=newnode;//生成新结点
p->data=x:
while(p2一>datanext!
=0){//找到x应插入的位置
pl=p2;
(27);
}
if(p2一>next!
=0)
p一>next=p2:
//插入以X为数据域的结点
pl一>next=p:
q=pl;
while(28){//通过循环,将插入结点之后所有数据域小于x的结点前移
if(p2一>datapl一>next=(29);
p2一>next=p;
q一>next=p2;
q=p2;
p2=pl一>next;
}
else
{
pl=p2;
p2=p2一>next:
}
}
}
else{//如果链表中所有结点数据域均小于x,则在链尾插入以x为数据域的新结点
p2一>next=p;
(30);
}
returnpa;
}
voidmain(void)
{
nodea[10]={{3},{4},{2},{1},{9},{6},{5},{0},{10},{6}},*head=a,*p;
inti,x;
for(i=0;i<9;i++)
a[i].next=&a[i+1];
a[9].next=NULL;
cout<<"输入x的值:
";
cin>>x;
head=change(head,x);
p=head;.
while(p){
cout<
data<<'\t';
p=p一>next;
}
cout<}