2

我的节点类目前有这个代码,它存储两个名称、一个 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() 函数的第一行。(未处理的异常)当我尝试使用单独的链表类调用 node->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->printNode() 时失败(在 cout << IDnumber 行有一个中断)并且在 list = list->Next 行也失败了。

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;

  }
4

1 回答 1

1

您的代码中几乎没有错误。最重要的是,当您应该引用一些常见的,即静态变量时,您list总是引用本地指针。NULLNode

在这里您可以找到有效的解决方案,请添加正文以进行正确的列表解除分配

~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. 搜索节点并打印信息 5. 退出程序
输入 ID 号: 8 输入姓氏: i 输入名字: j 输入 ID 号: 9 输入姓氏: k 输入名字:l

身份证号码:8

姓名:我

名字:j

身份证号码:9

姓名:k

名字:l

运行成功(总时间:14s)

于 2013-09-26T04:09:03.773 回答