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;
    }
}