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: 202
        
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