linked list problem (with insert)

Posted by JohnWong on Stack Overflow See other posts from Stack Overflow or by JohnWong
Published on 2010-05-10T16:14:41Z Indexed on 2010/05/10 16:34 UTC
Read the original article Hit count: 148

Filed under:
|
|

The problem appears with the insert function that I wrote. 3 conditions must work, I tested b/w 1 and 2, b/w 2 and 3 and as last element, they worked.

But b/w 3 and 4, it did not work. It only display up to the new added record, and did not show the fourth element.

Efficiency is not my concern here (not yet). Please guide me through this debug process.

Thank you very much.

#include<iostream>
#include<string>
   using namespace std;

    struct List    // we create a structure called List
   {
      string name;  
      string tele;
      List *nextAddr;
   };

   void populate(List *);
   void display(List *);
   void insert(List *);

    int main()
   {
      const int MAXINPUT = 3;
      char ans;  

      List * data, * current, * point;  // create two pointers
      data = new List;
      current = data;

      for (int i = 0; i < (MAXINPUT - 1); i++)
      {
         populate(current);
         current->nextAddr = new List;
         current = current->nextAddr;
      }

   // last record we want to do it sepeartely

      populate(current);
      current->nextAddr = NULL;
      cout << "The current list consists of the following data records: " << endl;
      display(data);

   // now ask whether user wants to insert new record or not

      cout << "Do you want to add a new record (Y/N)?";

      cin  >> ans;

      if (ans == 'Y' || ans == 'y')
      {
        /* 

            To insert b/w first and second, use point as parameter
            between second and third uses point->nextAddr
            between third and fourth uses point->nextAddr->nextAddr
            and insert as last element, uses current instead 

            */       
            point = data;
            insert(());  
         display(data);
      }

      return 0;     
   }


    void populate(List *data)
   {
      cout << "Enter a name: ";
      cin >> data->name;
      cout << "Enter a phone number: ";
      cin >> data->tele;

      return;
   }

    void display(List *content)
   {
      while (content != NULL)
      {
         cout << content->name << "     " << content->tele;
         content = content->nextAddr;
         cout << endl; // we skip to next line
      }

      return;
   }

    void insert(List *last)
   {
      List * temp = last->nextAddr; //save the next address to temp
        last->nextAddr = new List; // now modify the address pointed to new allocation
      last = last->nextAddr; 
      populate(last);
        last->nextAddr = temp; // now link all three together, eg 1-NEW-2

      return;
   }

© Stack Overflow or respective owner

Related posts about c++

Related posts about beginner