链表用选择法排序,怎么换位?

来源:百度知道 编辑:UC知道 时间:2024/06/26 02:14:08
比如p和r都是指向结点的指针,那么在进行比较之后,需要换位,应该怎么换?
如果换的是值是这样换的:temp=a;a=b;b=temp;可这个换的是地址啊,而且又得连起来.应该怎么换啊?
直接交换结点的值是一种方法,但是,如果结点里面的值过多,而且还包括大的数组,不是开销太大了嘛.
二楼的,你的我稍微看懂了一点.但只换了尾巴没换头啊.

回答者:denning能不能细讲讲,我懵了,我乍换也感觉不太顺.你能一步步给我讲一下吗,多谢了

这一点上次我也在考虑

可以这样,比如说交换p和r两个指针所指向的单元,
最好交换指针值,免去,大量的数据交换.

但会出现上一个指针连不下去的情况

这时候 可能需要再定义 一个指针s来存储 上一个接点的位置.
s->next=r;p->next=r->next;r->next=p;
另外你要考虑,当s=p的情况下,直接
s=r;p->next=r->next;r->next=p;

估计你能了解我的意思

Node *temp;
temp->next = p->next;
p->next= r->next;
r->next = temp->next;

如果是双向的链表,还需要换另一个指针

memcpy更直接,哈哈

如果不想换值的话应该把要换的两个结点都断开,使两个结点都成为独立的结点,这样再交换,然后重新连接。

用指针记录这两个指针上一个结点,还有就是交换完后,还得把这两结点的*next交换

直接交换结点的值不行么。