Изменение связанных списков в C ++ - PullRequest
0 голосов
/ 17 марта 2012

Я пытаюсь написать функцию для добавления узла в связанный список в любой позиции.

Это то, что я имею до сих пор:

 ListNode* addNode( ListNode* pHead, ListNode* pNode, int pos )
 {
      if( pHead == NULL )
      {
           pHead = pNode;
      }
      else if( pos == 0 )
      {
           pNode->pNextNode = pHead;
           pHead = pNode;
      }
      else
      {
           ListNode* pTempNode = pHead;
          for(int i = 0; i < pos; i ++)
           {
                if(pTempNode->pNextNode != NULL)
                {
                     pTempNode = pTempNode->pNextNode;                    
                }
                else
                {
                     break;
                }
           }
           pNode->pNextNode = pTempNode->pNextNode;
           pTempNode->pNextNode = pNode;

           pHead->pNextNode = pTempNode;
      }

     return pHead;
 }

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

Ответы [ 2 ]

1 голос
/ 17 марта 2012

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

pHead->pNextNode = pTempNode;

также есть ошибка off-by-one, вам нужно запустить цикл for с 1 вместо 0.

0 голосов
/ 17 марта 2012

Это не обязательно, вы должны удалить это:

pHead->pNextNode = pTempNode;

Это удалит узел перед pTempNode.

Удачи

...