При добавлении элементов в связанный список и выписывании всех элементов первый элемент не записывается

0

У меня проблема с моим связанным списком при написании элементов: при запуске main.cpp я получаю следующий вывод:

myList.endInsert(5);
    cout << myList << endl;     output: nothing
    myList.headInsert(3);
    cout << myList << endl;     output : 3
    myList.headInsert(2);
    cout << myList << endl;     output : 3 2

Я полагал, что prboble, вероятно, либо в headinsert, либо как я поручил моему оператору >>: Coder for headinsert:

void IntList::headInsert(int the_number)
{
    if (head == NULL) //if list is empty
    {
        head = new IntNode; //create new dynamic variable
        head -> data = the_number; //add value to new variable
        head -> link = NULL; //    }
    else
    {
        NodePtr temp = new IntNode;
        temp -> data = the_number;
        temp ->link = head; //temp pointer becomes head
        head = temp; //head becomes temp
    }

**And here is the friend function for the operator:**



 ostream& operator <<(ostream& outs, const IntList& lis)
    {

      for(NodePtr temp = lis.head; temp->getLink() != NULL; temp = temp->getLink())
      {

        if( temp->getLink() != NULL)
          {
              outs << " ";
              outs << temp->getData();
          }

      }
      return outs;
    }

Может ли кто-нибудь пролить свет на то, что может быть неправильно?

Заранее спасибо!

  • 0
    по какой-либо причине не использовать std :: list?
  • 0
    каждый раз, когда вы добавляете новый элемент, он становится «головой», это намерение?
Теги:
linked-list

3 ответа

1

вы не печатаете свой последний товар...

  for(NodePtr temp = lis.head; temp != NULL; temp = temp->getLink())
  {
     outs << " ";
     outs << temp->getData();
  }

должен это сделать (не проверено :).

  • 0
    Работал как шарм. Спасибо!
  • 0
    Молодец! но все же, если нет причин (например, это домашнее задание), используйте std :: list. в противном случае эта ссылка может немного помочь.
Показать ещё 1 комментарий
0

Когда вы вставляете первый элемент, который вы устанавливаете

head->link == null;

когда вы позже распечатаете чек

if( temp->getLink() != NULL)
{
  outs << " ";
  outs << temp->getData();
}

вы не напечатаете первый элемент, так как он равен нулю.

Удалить:

if( temp->getLink() != NULL)

и он должен работать

-1
ostream& operator <<(ostream& outs, const IntList& lis)
{

  for(NodePtr temp = lis.head; temp != NULL; temp = temp->getLink())
  {

    //if( temp->getLink() != NULL)
      {
          outs << " ";
          outs << temp->getData();
      }

  }
  return outs;
}

Это! Должно работать сейчас!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню