通过修改链接对链接列表进行排序

时间:2014-02-05 17:13:59

标签: c++ c linked-list

我正在尝试通过修改链接而不是交换data.i'm使用选择sort来排序链接列表。我不知道我哪里出错。我是初学者请帮助我。

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

1 个答案:

答案 0 :(得分:2)

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