Пытаюсь вставить узел в заданную позицию, но я застреваю в бесконечном цикле - PullRequest
0 голосов
/ 06 мая 2020

Я пытаюсь добавить узел в заданную позицию в связанном списке, однако по некоторым причинам я застрял в бесконечном l oop. Когда я запускаю следующий код, оператор cout в l oop продолжает выводить вечно. Эта проблема возникает из-за того, что я неправильно делаю l oop, или из-за того, что я что-то испортил с тем, как я использовал указатели? Я впервые имею дело с указателями и думаю, что заблудился.

примечание: я пытаюсь научиться вставлять узел в заданную позицию, поэтому следующий код является полным синтаксически.

вот мой код:

void LList::InsertElement(){

// PRE: the N. O. LList is valid

// POST: a new element thing has been inserted at the 
//      given position of the list.If that position doesn't 
//      exist, the LList will be unchanged.

listnode * temp;
element thing;
int position;
int inc;
inc = 1;
cout << "Enter the position where you want to add the element at: ";
position = read_position();

cout << "Enter the element value: ";
thing = read_element();

temp = new listnode;
temp -> data = thing;

if (listSize==0 && position==1){
    head = temp;
    temp -> next = nullptr;}

else if(position<= listSize){
    temp = head;

    while(inc < position){ // for some reasons this loop is infinite

        temp -> next = temp;

        temp = temp -> next;
        cout << endl<< "NEXT: " << temp -> data;
        inc +=1;
        }

    temp -> data = thing;

    }
else;

}

Ответы [ 2 ]

0 голосов
/ 10 мая 2020

Спасибо, ребята, что помогли мне. Это мой последний код, и он работает благодаря вашей помощи, спасибо.

current = head;
    while(inc < position){

        current = current -> next;

        inc +=1;
        }

    temp -> next = current -> next;
    current -> next = temp;
0 голосов
/ 06 мая 2020

Что ж, сделайте это так:

while(inc < position)
{ 
// print data     
        cout << endl<< "NEXT: " << temp -> data;
// increment temp to point to next
   temp = temp -> next;
        inc +=1;
 }

Ваш код:

temp -> next = temp; 
temp = temp -> next; 

эта строка заставляет повторять одни и те же данные снова и снова. Вроде л oop внутри л oop, работает вечно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...