2016-11-09 4 views
-2

У меня есть список ссылок, как я могу добавить узел до или после определенного узла? например, пользователь говорит, что добавить значение узла 8 до узла 3?добавить узел до и после LinkList

перед: 12345 после добавления узла: 128345

мой код:

void Linklist::InsertBefore(){ 


    int nodenumber = 0; 
    cout << "Enter the node number :" << endl; 
    cin >> nodenumber; 

    if (nodenumber>count()) 
    { 
     cout << "node does not exist " << endl; 
    } 


    else{ 

     int x = 1; 


     Node *current = head; 
     Node *add = new Node(6); 
     Node *temp = nullptr; 
     while (x != nodenumber){ 


      add = current; 

      current = current->next; 
      x++; 

     } 

     temp = current; 
     current->next = add; 
     add->data = 2; 
     add->next = temp; 




    } 


} 
+0

Правильный инструмент для решения таких проблем - ваш отладчик. Перед тем, как просить о переполнении стека, вы должны пропустить свой код по очереди *. Для получения дополнительной информации, пожалуйста, прочтите [Как отлаживать небольшие программы (Эрик Липперт)] (https://ericlippert.com/2014/03/05/how-to-debug-small-programs/). Как минимум, вы должны \ [изменить] ваш вопрос, чтобы включить пример [Минимальный, полный и проверенный] (http://stackoverflow.com/help/mcve), который воспроизводит вашу проблему, а также замечания, сделанные вами в отладчик. –

+0

Я пробовал отлаживать. –

+0

Затем покажите свои наблюдения [в своем вопросе] (http://stackoverflow.com/posts/40513777/edit), как упомянуто, пожалуйста. –

ответ

0

Ваше условие цикла x != nodenumber останавливает цикл, когда вы достигли узла, перед которым вы хотите добавить новый узел , Итак, current->next = add добавляет новый узел ПОСЛЕ узла, а не раньше. Вы должны рассмотреть вопрос об использовании предыдущего указателя, например, так:

int x = 1; 

Node *previous = nullptr; 
Node *current = head; 
Node *add = new Node(6); 
while (x != nodenumber) { 
    previous = current; 
    current = current->next; 
    x++; 
} 

previous->next = add; 
add->next = current; 

Кроме того, я не совсем уверен, что Node *add = new Node(6); и add->data = 2; делают. Откуда берутся 6 и 2? Ваш код немного неясен. Не говоря уже о том, что вы не указали, в чем именно была ваша проблема, поэтому я сделал все, что мог. Надеюсь, поможет!

Смежные вопросы