C++ 通过修改链接对链接列表进行排序
我正在尝试通过修改链接而不是交换数据来对链接列表进行排序。我使用的是选择排序。我不知道哪里出了问题。我是初学者,请帮助我C++ 通过修改链接对链接列表进行排序,c++,c,linked-list,C++,C,Linked List,我正在尝试通过修改链接而不是交换数据来对链接列表进行排序。我使用的是选择排序。我不知道哪里出了问题。我是初学者,请帮助我 struct node { int data; node* link; }; node* p; void sort() { node* temp = p; node* save; node* prev; node* tprev; node* push = new node; tprev = NU
struct node
{
int data;
node* link;
};
node* p;
void sort()
{
node* temp = p;
node* save;
node* prev;
node* tprev;
node* push = new node;
tprev = NULL;
for (; temp != NULL; temp = temp->link)
{
push = temp->link;
for (; push != NULL; push = push->link)
{
if (push->data<temp->data)
{
save->link = temp->link;
temp->link = push->link;
push->link = save->link;
prev->link = temp;
tprev->link = push;
}
prev = push;
}
tprev = temp;
}
}
struct节点
{
int数据;
节点*链接;
};
节点*p;
空排序()
{
节点*temp=p;
节点*保存;
节点*prev;
节点*tprev;
节点*推送=新节点;
tprev=NULL;
对于(;temp!=NULL;temp=temp->link)
{
推送=温度->链接;
for(;push!=NULL;push=push->link)
{
如果(推送->数据)
{
保存->链接=临时->链接;
温度->链接=推送->链接;
按->链接=保存->链接;
上一个->链接=温度;
tprev->link=push;
}
prev=推送;
}
tprev=温度;
}
}
无效排序(){
节点*temp,*push;
节点*tprev,*pprev;
节点*保存;
tprev=NULL;
对于(temp=p;temp!=NULL;temp=temp->link){
pprev=温度;
对于(推送=临时->链接;推送!=NULL;推送=推送->链接){
如果(推送->数据<临时->数据){
保存=临时->链接;
温度->链接=推送->链接;
如果(保存==推送)
按下->链接=温度;
其他的
按->链接=保存;
如果(pprev!=温度)
pprev->link=temp;
如果(tprev)
tprev->link=push;
其他的
p=推力;
保存=温度;
温度=推力;
推送=保存;
}
pprev=推送;
}
tprev=温度;
}
}
您能否统一设置代码格式,这看起来很糟糕。清洁代码,是工作代码的第一步。另外,在操作符之间放置空格。我非常抱歉,我是新来的bie,我不知道如何格式化。如果你说我可以如何格式化,那会很有帮助do@saimadan交换节点逻辑(代码)不正确,不考虑父节点的链接。阅读@saimadan我希望我能回答,但也有排序逻辑。我发表了关于节点交换的评论。我学习如何正确交换代码。你可以阅读我链接的答案。@saimadan好的,我不保证,但让我尝试更正。
void sort(){
node *temp, *push;
node *tprev, *pprev;
node *save;
tprev = NULL;
for (temp = p; temp != NULL; temp = temp->link){
pprev = temp;
for (push=temp->link; push != NULL; push = push->link){
if (push->data < temp->data){
save = temp->link;
temp->link = push->link;
if(save == push)
push->link = temp;
else
push->link = save;
if(pprev != temp)
pprev->link = temp;
if(tprev)
tprev->link = push;
else
p = push;
save = temp;
temp = push;
push = save;
}
pprev = push;
}
tprev = temp;
}
}