将链接列表转换为排序列表

时间:2014-10-26 18:02:24

标签: c++ list

如何在插入新项目时将此列表转换为订单列表?我知道从哪里开始,但缺少一小部分难题。

这是我的代码:

void Node:: insert(int dat)
 {
    Node * newnode = new Node();
    newnode->data=dat;
    newnode->next=NULL;
    if(first==NULL)
    {
        first=newnode;
    }
    else
    {
        Node *temp=first;
        while(temp->next!=NULL)
        { temp=temp->next; }
        temp->next=newnode;
    }
}

1 个答案:

答案 0 :(得分:1)

尝试以下

void Node:: insert( int dat )
{
    Node *prev = NULL;
    Node *current = first;

    while ( current != NULL && !( dat < current->data ) )
    { 
        prev = current;
        current = current->next;
    }

    Node *newnode = new Node { dat, current };

    if ( prev != NULL ) prev->next = newnode;
    else first = newnode;
}

我认为Node被定义为

struct Node
{
   int data;
   Node *next;
};

声明

Node *newnode = new Node { dat, current };

你可以替代

Node *newnode = new Node();
newnode->data = dat;
newnode->next = current;

如果first是其数据成员,那么似乎错误地定义了类Node。

这是一个演示功能的简化示例。当然,这不是一个完整的例子

#include <iostream>

class List
{
public: 
    List() : first( NULL ) {}
    void insert( int dat )
    {
        Node *prev = NULL;
        Node *current = first;

        while ( current != NULL && !( dat < current->data ) )
        { 
            prev = current;
            current = current->next;
        }

        Node *newnode = new Node { dat, current };

        if ( prev != NULL ) prev->next = newnode;
        else first = newnode;
    }

    void display() const
    {
        for ( Node *current = first; current != NULL; current = current->next )
        {
            std::cout << current->data << ' ';
        }
    }
private:
    struct Node
    {
        int data;
        Node *next;
    } *first;
};

int main() 
{
    List l;

    l.insert( 5 );
    l.insert( 2 );
    l.insert( 7 );
    l.insert( 8 );
    l.insert( 1 );
    l.insert( 0 );
    l.insert( 4 );
    l.insert( 6 );
    l.insert( 9 );
    l.insert( 3 );

    l.display();
    std::cout << std::endl;

    return 0;
}

输出

0 1 2 3 4 5 6 7 8 9