在C ++中修改链接列表

时间:2012-03-17 02:56:45

标签: c++ linked-list nodes

我正在尝试编写一个函数来将节点添加到任何位置的链表中。

这是我到目前为止所做的:

 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 个答案:

答案 0 :(得分:1)

你的代码看起来正确,除了这一行似乎没必要:

pHead->pNextNode = pTempNode;

还有一个一个一个错误,你需要以1而不是0开始你的for循环。

答案 1 :(得分:0)

这不是必需的,你应该删除它:

pHead->pNextNode = pTempNode;

它将删除pTempNode之前的节点。

祝你好运