在C++中修改链表

Modifying Linked Lists in C++

本文关键字:链表 修改 C++      更新时间:2023-10-16

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

这就是我目前所拥有的:

 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;
 }

问题是,当试图添加一个不在前面的节点时,会在在中间切掉几个节点。我只是不知道在列表中搜索位置、插入新节点,然后返回整个列表的正确方法。

您的代码看起来不错,但这一行似乎没有必要:

pHead->pNextNode = pTempNode;

还有一个off-by-one错误,您需要在1而不是0处启动for循环。

这不是必要的,您应该删除它:

pHead->pNextNode = pTempNode;

它将删除pTempNode之前的节点。

好运