我正在尝试实现一个简单的链接列表。初始值已成功插入,但未正确输入下一个元素。请帮我解决错误。谢谢。
#include<iostream>
using std::cout;
class node
{
public:
node():next(0){}
void setNext(node *next){ next = next; }
node* getNext(){ return next; }
void setValue(int val){ value = val; }
int getValue(){ return value; }
private:
int value;
node *next;
};
class list
{
public:
list():head(new node()),len(0){}
bool insert(int value);
//bool remove(int value);
int valueAt(int index);
int length();
private:
node *head;
int len;
};
bool list::insert(int value)
{
node *current = 0;
node *previous = 0;
node *temp = 0;
temp = new node();
temp->setValue(value);
current = head;
previous = head;
while((temp->getValue())>(current->getValue()))
{
previous = current;
current = current->getNext();
if(!current)
{
break;
}
}
if(current == head)
{
temp->setNext(current);
head = temp;
len++;
}
else
{
temp->setNext(current);
previous->setNext(temp);
len++;
}
}
int list::valueAt(int index)
{
if((index < len) && (index >= 0))
{
node *current = 0;
current = head;
int count = 0;
while(count < index)
{
current = current->getNext();
count++;
}
return (current->getValue());
}
else
{
return -1;
}
}
int main()
{
list myList;
myList.insert(5);
myList.insert(20);
myList.insert(10);
cout<<"Value at index 1 : "<<myList.valueAt(1);
return 0;
}
答案 0 :(得分:3)
粗略地看了一眼后,问题可能是
void setNext(node *next){ next = next; }
您正在为自己分配一个变量,因为局部变量会掩盖实例变量。尝试将其更改为
void setNext(node *next){ this->next = next; }
在其他说明中:
在list::list
中,您可能不应将head
初始化为new node
。这意味着您的链接列表在创建时将有一个任意节点,但长度为0.您应该考虑将head
设置为NULL
。
在创作时,node
有一个随机value
。考虑在构造函数中要求参数,或者使用适当的默认值。
-1
是list::valueAt
的错误“无效值”,因为它也是要存储的节点的有效值。
您可能应该将list
类重命名为slist
,以表明它按排序顺序存储值。