我试图刷新类的链表,但在为while
循环设置条件的行中遇到了这个错误。
using namespace std;
class linkedList{
private:
struct list{
int num;
list* next;
};
list* head;
public:
void newList(int num);
void display() const;
};
int main(){
linkedList mylist;
mylist.newList(5);
mylist.display();
return 0;
}
void linkedList::display() const{
list* ptr;
ptr = head;
while (!ptr) {
cout << ptr->num << endl;
ptr = ptr->next;
}
}
void linkedList::newList(int num){
list* newNode;
list* nodeptr = nullptr;
newNode = new list;
newNode->num = num;
newNode->next = nullptr;
if(!head){
head = newNode;
}else{
nodeptr = head;
while(nodeptr->next){
nodeptr = nodeptr->next;
}
}
nodeptr->next = newNode;
}
需要纠正的三个问题:
-
在类定义中初始化
head
:list* head = nullptr;
-
事实上,
while
声明中存在一个问题。当指针为null(!ptr
(时,您将希望退出循环。要继续迭代,您的条件是相反的,这就是您必须指定的:while (ptr) {
-
在
newList
方法中,当前一个if
中的条件为true时,也执行最后一条语句。在这种情况下,nodeptr
是一个空指针。。。在最后一条语句中给出一个空指针异常(分段错误(。因此,在else
块中移动该语句:}else{ // .... nodeptr->next = newNode; // moved here }