链表列表

时间:2014-01-20 18:05:10

标签: c++ linked-list

我正在尝试实现链接列表数组。我面临的问题是,当我使用for循环进行遍历时,代码会抛出运行时错误。任何人都可以解释为什么会发生这种情况和可能的建议         //创建链接列表数组的程序。

     #include <iostream>
     using namespace std;

     struct Node{
       int val;
       Node *next;
     };

     struct Node* insertFirst(struct Node *head, int data){
       struct Node *temp = new Node;
       temp->val = data;
       temp->next = NULL;

       if(head == NULL){
         head = temp;
         return head;
       }
       temp->next=head;

       return temp;
     }

     void traverse(struct Node* head){
       struct Node *list = head;
       if(list == NULL)
         cout<<"List is empty";

       else{
         while(list){
           cout<<list->val<<",";
           list = list->next;
         }
       }
       cout<<endl;    
     }

    int main(){
      struct Node* array[3];

      array[0] = insertFirst(array[0],30);
      array[0] = insertFirst(array[0],20);
      array[0] = insertFirst(array[0],10);

      array[1] = insertFirst(array[1],60);
      array[1] = insertFirst(array[1],50);
      array[1] = insertFirst(array[1],40);


      array[2] = insertFirst(array[2],90);
      array[2] = insertFirst(array[2],80);
      array[2] = insertFirst(array[2],70);

      // Traversal works
      /*traverse(array[0]);
      traverse(array[1]);
      traverse(array[2]);*/

      // Traversal throws run time error.
      for(int i=0; i<3; i++){
         traverse(array[i]);
      }


      return 0;
   }

1 个答案:

答案 0 :(得分:5)

问题是局部变量(如main函数中的数组)未初始化,因此它们的值是不确定的(即随机)。所以当你这样做时

array[0] = insertFirst(array[0],30);

将非空值传递给函数并使用它,导致未定义的行为