如何在插入新项目时将此列表转换为订单列表?我知道从哪里开始,但缺少一小部分难题。
这是我的代码:
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;
}
}
答案 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