我目前有这个代码用于我的节点类,它存储两个名称,一个ID号,并具有Next功能:
class Node{
public:
char LastName[20] ;
char FirstName[20] ;
int IDnumber ;
Node *Next ;
Node();
void printNode();
};
这是我用来从键盘初始化节点变量的构造函数:
Node::Node(){
cout << "Enter ID number: " << endl;
cin >> IDnumber;
cout << "Enter last name: " << endl;
cin >> LastName;
cout << "Enter first name: " << endl;
cin >> FirstName;
Next=NULL;
}
void Node::printNode(){
cout << "ID number: " << IDnumber << endl;
cout << "Last name: " << LastName <<endl;
cout << "First name: " << FirstName << endl;
}
我遇到的问题是,无论何时我在代码中调用printNode()函数,我的代码都无法执行printNode()函数的第一行。 (未处理的异常)当我尝试使用单独的linkedlist类调用node-&gt; Next时,我也无法执行此代码。这让我相信我没有正确构建节点。关于我的代码中可能出错的任何想法?
链表是一个单独的类,它使用我在上面发布的节点类。
class LinkedList{
private:
Node* list;
Node* createNode();
Node* searchLocation(int);
public:
LinkedList();
~LinkedList();
void InsertNode();
void SearchNode();
void PrintList();
void DeleteNode(int);
};
LinkedList::LinkedList(){
Node* list = NULL;
}
Node* LinkedList::createNode(){
Node *NewNode = new Node();
return NewNode;
}
void LinkedList::InsertNode(){
Node* insert = createNode();
if (list == NULL){
list = insert;}}
void LinkedList::PrintList(){
Node* temp = list;
while (temp != NULL){
temp->printNode();
temp = temp->Next;
}
}
我的LinkedList类的PrintList()函数在list-&gt; printNode()(cout&lt;&lt;&lt; IDnumber行)中断时失败,并且在list = list-&gt;下一行失败。
int main(){
int num = 0;
LinkedList list;
int menu=0;
while(menu != 5){
cout << endl << "Choose a menu option." <<endl
<< "1. Insert node " << endl << "2. Delete node " << endl
<< "3. Print list" << endl << "4. Search a node & print info" << endl
<< "5. Quit program " << endl;
cin >> menu;
menu = validate(menu);
switch(menu){
case 1:
list.InsertNode();
break;
case 3:
list.PrintList();
break;
}}
return 0;
}
答案 0 :(得分:1)
您的代码中的错误很少。最重要的是,当您引用一些常见的list
即静态变量时,您会引用始终为NULL
的本地Node
指针。
在这里你可以找到工作解决方案,请为正确的列表释放添加正文
~LinkedList(){}
你没事:
链表:
class LinkedList{
private:
static Node* list;
Node* createNode();
Node* searchLocation(int);
public:
LinkedList();
~LinkedList(){}
void InsertNode();
void SearchNode();
void PrintList();
void DeleteNode(int);
};
Node* LinkedList::list = NULL;
^
don't foget to initialize pointer to static object
LinkedList::LinkedList(){
Node* list = NULL;
}
Node* LinkedList::createNode(){
Node *NewNode = new Node();
return NewNode;
}
void LinkedList::InsertNode(){
Node* insert = createNode();
if(list==NULL)list=insert;
else
list->Next = insert;
}
void LinkedList::PrintList(){
Node* temp = list;
while (temp != NULL){
temp->printNode();
temp = temp->Next;
}
}
和主要:
int main(){
int num = 0;
LinkedList list;
cout << endl << "Choose a menu option." <<endl
<< "1. Insert node " << endl << "2. Delete node " << endl
<< "3. Print list" << endl << "4. Search a node & print info" << endl
<< "5. Quit program " << endl;
list.InsertNode();
list.InsertNode();
list.PrintList();
return 0;
}
输出:
选择菜单选项。
1.插入节点
2.删除节点
3.打印列表
4.搜索节点&amp;打印信息
5.退出程序
输入身份证号码:
8
输入姓氏:
一世
输入名字:
Ĵ
输入身份证号码:
9
输入姓氏:
ķ
输入名字:
升
身份证号码:8
姓氏:我
名字:j
身份证号码:9
姓氏:k
名字:l
RUN SUCCESSFUL(总时间:14s)