链表列表

ran*_*fde -2 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;
   }
Run Code Online (Sandbox Code Playgroud)

Som*_*ude 5

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

array[0] = insertFirst(array[0],30);
Run Code Online (Sandbox Code Playgroud)

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